我希望有一个Spring REST Controller,它返回一个包含文件的对象数组,基本上是一张图片。我能做的是:
或在代码中,如下所示:
@RequestMapping(value = "/getInfo")
public ResponseEntity<Object> getInfo() throws Throwable {
ArrayList<Object> objList = new ArrayList<Object>();
for (int i = 0; i < 10; i++) {
Object obj = new Object();
obj.setField1(0);
obj.setField2(0);
String stringImg = // Convert image to base 64 string
obj.setStringImg(stringImg);
objList.add(obj);
}
return new ResponseEntity<Object>(objList, HttpStatus.OK);
}
我听说转换和使用base 64字符串浪费空间并不是最好的做法。是否有替代或更好的方法来做到这一点?
答案 0 :(得分:0)
您听错了,Base64
文件大小增加 33%如果您将要上传的所有文件都放在内存中,则存在内存不足异常的高风险。在我看来,将图像上传到Spring Web服务的最佳方法是创建一个使用Spring MultiPartFile
上传图像的方法(这将为您处理大文件,存储在文件系统而不是内存中),将其保存到数据库和另一种方法获取您通过id或name存储的图像。
我的意思的一个例子:
public long uploadImage(@RequestParam("file") MultipartFile file)){
InputStream in = new ByteArrayInputStream(file.getBytes());
// save the file to the database as blob or clob
return file id or name;
}
然后在另一个方法中,将数据库中的图像作为Blob或Clob获取,将其转换为字符串,创建列表并将其返回给客户端。创建包含所有文件的列表无论如何都会将文件放入内存中,但至少为每个文件保存 33%的文件大小。
另一种选择是让客户端一次获得一个图像,然后让它构建包含所有文件的列表。顺便说一句,您的选择取决于图像大小,以及有多少用户将使用此服务。