我需要一个正在做9gag之类的项目的帮助,我试图返回一个包含一些数据和图像的JSON对象。
我尝试了几种方法,以字节数组返回图像并设置GetMapping注释以产生=“ image / jpeg”。另外,我尝试使用Base64进行此操作,但是由于我是使用Base64的新手,因此我不确定完全可以正确使用它。
@GetMapping(value = "/")
public List<PostDTO> browseAll() throws IOException {
List<Media> dbMedia = mediaRepo.findAll();
List<PostDTO> postDTOS = new ArrayList<>();
for (Media media : dbMedia){
postDTOS.add(media.convertToPostDTO());
}
for (PostDTO post : postDTOS){
post.setFile(returnImage());
}
return postDTOS;
}
private String returnImage() throws IOException {
List<Media> media = mediaRepo.findAll();
for (Media file : media){
File newImage = new File(file.getDir());
FileInputStream fis = new FileInputStream(newImage);
String encoded = Base64.getEncoder().encodeToString(fis.readAllBytes());
String imgData = "data:image/jpeg;base64," + Base64Utils.decodeFromString(encoded);
return imgData;
}
return "failed";
}
通过使用Produce =“ image / jpec”来实现,我得到了-“已解决[org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示形式]”另外,我还在使用Postman进行测试。 同样在这里,一个Json对象是什么样子,在“文件”处,我需要实际的图像。
{
"author": "Uponn",
"title": null,
"likes": 0,
"file": "data:image/jpeg;base64,[B@3acfd4dd",
"uploadTime": null
},
答案 0 :(得分:0)
根据以上讨论,如果我的理解是正确的,则需要将图像发送给前端工程师,以便他们能够在网页中显示。我在下面的代码段中提供了,您可以尝试。
@GetMapping(value = "/showImage", produces = "image/jpg")
public ResponseEntity<byte[]> getImageAsResponseEntity(
@RequestParam("fileName") String fileName) {
String dirPath = "some path in your drive/";
HttpHeaders headers = new HttpHeaders();
InputStream in = null;
byte[] media = new byte[0];
try {
in = new FileInputStream(dirPath + fileName);
media = IOUtils.toByteArray(in);
} catch (IOException e) {
e.printStackTrace();
}
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(media, headers, HttpStatus.OK);
return responseEntity;
}