Я пытаюсь вернуть изображения из моей корзины S3. Все работает отлично, мой сервис загружает и получает изображения, но проблема в том, что когда я пытаюсь вернуть их через контроллер REST, изображение не отображается в браузере.
Вот где я получаю изображение с S3:
public S3Object getImageFromS3Bucket(String fileName) {
S3Object object = s3client.getObject(new GetObjectRequest(bucketName, fileName));
return object;
}
public byte[] getByteArrayFromImageS3Bucket(String fileName) throws IOException {
InputStream in = getImageFromS3Bucket(fileName).getObjectContent();
byte[] byteArray = IOUtils.toByteArray(in);
in.close();
return byteArray;
}
и вот мой контроллер:
@RequestMapping(value = "/getImage/{fileName}", method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public ResponseEntity<byte[]> downloadImage(@PathVariable("fileName") String fileName) throws IOException {
byte[] media = s3BucketTestService.getByteArrayFromFile(fileName);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
headers.setContentLength(media.length);
return new ResponseEntity<>(media, headers, HttpStatus.OK);
}
Вот заголовки ответа:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 10645
Content-Type: image/png
Date: Mon, 14 May 2018 09:41:47 GMT
Expires: 0
Pragma: no-cache
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
У меня также есть этот bean-компонент в моей конфигурации:
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
ByteArrayHttpMessageConverter arrayHttpMessageConverter = new ByteArrayHttpMessageConverter();
arrayHttpMessageConverter.setSupportedMediaTypes(getSupportedMediaTypes());
return arrayHttpMessageConverter;
}
private List<MediaType> getSupportedMediaTypes() {
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.IMAGE_JPEG);
list.add(MediaType.IMAGE_PNG);
list.add(MediaType.APPLICATION_OCTET_STREAM);
return list;
}
Кто-нибудь знает, что я делаю не так? Браузер создает изображение в формате png с точным размером файла, который я пытаюсь получить, поэтому я думаю, что единственная проблема - это визуализация изображения?
PD: Я не хочу, чтобы изображение загружалось, я просто хочу сгенерировать этот ресурс, чтобы клиент мог его прочитать.