Cześć wszytkim ! Dostaję URL do pliku na Azurze i jest prawidłowy. Natomiast gdy staram się przesłać tablicę bajtów każedo pliku dostaję w postman coś takiego( patrzeć na screenshota) mysłałem że dostanę tablicę bajtów, natomiast dostaje od razu zserealizowany tekst i zdjęcie... Które wygląda że źle się zserealizowało. Jak można to naprawić żeby dostawać same bajty plików? I Dlatego zdjęcie wygląda w taki sposób?
Controller
@PostMapping("/files/getBytes")
public ResponseEntity<byte[]> getFileBytes(@RequestBody List<String> keys) {
return filesStore.getBytes(keys);
}
Service
public List<URL> getUrls(List<String> keys) {
List<URL> urls = new ArrayList<>();
if (keys.size() == 0) return urls;
BlobContainerSasPermission blobContainerSasPermission = new BlobContainerSasPermission()
.setReadPermission(true);
BlobServiceSasSignatureValues builder = new BlobServiceSasSignatureValues(OffsetDateTime.now().plusDays(1), blobContainerSasPermission)
.setProtocol(SasProtocol.HTTPS_ONLY);
keys.forEach(it -> {
try {
urls.add(new URL(blobClient.getClient().getBlobClient(it).getBlobUrl() + "?" + blobClient.getClient().generateSas(builder)));
} catch (MalformedURLException e) {
e.printStackTrace();
}
});
return urls;
}
public ResponseEntity<byte []> getBytes(List<String> keys) {
List<ByteArrayOutputStream> outputStreams = new ArrayList<>();
getUrls(keys).forEach(it -> {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
InputStream inputStream = null;
try {
inputStream = it.openStream();
byte[] byteChunk = new byte[4096];
int readByte;
while ((readByte = inputStream.read(byteChunk)) > 0)
byteArrayOutputStream.write(byteChunk, 0, readByte);
outputStreams.add(byteArrayOutputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return ResponseEntity.ok().headers(headers).body(Arrays.toString(outputStreams.toArray()).getBytes());
}