我想通过将图像转换为字节来为客户端提供图像,但由于某种原因,byteArrayOutputStream.toByteArray()为空。我得到的响应状态为200,这意味着它已被服务。我看了各种文档,介绍如何使用BufferedImage从目录中阅读图像文件,然后将BufferedImage转换为oracle https://docs.oracle.com/javase/tutorial/2d/images/loadimage.html和https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html中的byteArray,但由于某种原因,byteArray仍然是空的
该控制器
@GetMapping(path = "/get/image/{name}")
public ResponseEntity<byte[]> displayImage(String name) throws IOException {
String photoPathFromDatabase = productRepository.findPhotoByName(name);
Path path = Paths.get(photoPathFromDatabase);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BufferedImage image = ImageIO.read(path.toFile()); // Reading the image from path or file
String fileType = Files.probeContentType(path.toFile().toPath()); // Getting the file type
ImageIO.write(image, fileType, byteArrayOutputStream); // convert from BufferedImage to byte array
byte[] bytes = byteArrayOutputStream.toByteArray();
return ResponseEntity
.ok()
.contentType(MediaType.valueOf(fileType))
.body(bytes);
}
在我调试了
方法之后
2条答案
按热度按时间ego6inou1#
应该直接读取文件的字节,而不是使用来自不同类的大量方法,这可以通过类
java.nio.file.Files
来完成。j0pj023g2#
可能是文件扩展名设置不正确。
您可以创建一个新的方法来获取文件扩展名,或者使用Apache Commons IO中的
FilenameUtils.getExtension
。然后更改您的ImageIO以采用此文件扩展名。