簡體   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