![](/img/trans.png)
[英]How to pass JSON array from AngularJS Controller to the Spring Controller?
[英]How to pass array of JSON objects with Files from Spring Controller?
我想要一个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字符串会浪费空间,但这并不是最佳实践。 有替代的或更好的方法吗?
您没听Base64
, Base64
将文件大小增加了33% ,如果将所有要上传的文件放在内存中,则很有可能出现内存不足异常。 在我看来,将图像上传到Spring Web服务的最佳方法是制作一个使用Spring MultiPartFile
上传图像的方法(这将为您处理大文件,存储在文件系统中而不是内存中),然后将其保存到数据库中并保存在另一种方法是通过ID或名称获取您存储的图像。
我的意思是一个例子:
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%的文件大小。
另一种选择是让客户端一次获取一张图像,并让它用所有文件构造列表。 顺便说一下,您的选择取决于图像的大小以及将使用此服务的用户数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.