繁体   English   中英

如何通过Spring Controller中的文件传递JSON对象数组?

[英]How to pass array of JSON objects with Files from Spring Controller?

我想要一个Spring REST Controller,它返回包含文件(基本上是图片)的对象数组。 我能做的是:

  1. 创建一个POJO
  2. 获取图像并转换为基本64字符串
  3. 将此字符串作为字段放入POJO
  4. 将此POJO添加到ArrayList
  5. 根据需要重复步骤1-4
  6. 将ArrayList附加到ResponseEntity
  7. 发回响应实体给客户端
  8. 从客户端获取文件并在画布上绘制图像

或在代码中,如下所示:

@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字符串会浪费空间,但这并不是最佳实践。 有替代的或更好的方法吗?

您没听Base64Base64将文件大小增加了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM