2016-09-08 17 views
1

下面我有此控制器:如何使用Spring獲取1個請求中的多部分文件和表單數據?

@RequestMapping(value="/upload", method=RequestMethod.PUT) 
public ResponseEntity<String> handleFileUpload(
      @RequestParam("file") MultipartFile file, 
      @RequestBody Campaign inputCampaign, 
      Principal principal) { 

每當我沒有做的@RequestBody Campaign inputCampaign,這是對用戶的視頻保存數據的對象,並且將視頻上傳並保存到正確的目錄,它工作正常。

不過,我想趁自己上傳的文件,並與他們的競選1個請求,這樣的方式我能救他們的活動的相關信息相關聯的表格數據(如標題,描述,等...) 。

當我嘗試使用上面的控制器,並試圖發送的郵差的請求,我得到下面這個錯誤:

"timestamp": 1473349676109, 
    "status": 415, 
    "error": "Unsupported Media Type", 
    "exception": "org.springframework.web.HttpMediaTypeNotSupportedException", 
    "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryTVc9eDC2a2elulOx;charset=UTF-8' not supported", 
    "path": "/dashboard/upload" 

這是我的郵差請求設置:

Postman Request

如何在一個請求中發送活動表單數據和文件?該活動對象有許多領域,所以我不希望有投入控制器參數@RequestParam對每個表單字段。傑克遜應該自動映射屬性。

+0

什麼類型的文件是你想發送到該RequestMapping? – px06

+0

@ px06目前允許發送jpg,png和mp4。當我拿出'@RequestBody活動inputCampaign',但我希望能夠與它會自動映射到'Campaign'對象的文件接收表單數據,他們所有的工作(Spring的傑克遜庫中自動執行此操作) –

回答

0

傑克。

你嘗試通過刪除兩個註釋?

出於演示的目的,我做了如下一個簡單的映射:

@PutMapping("/file/{fileName}") 
@ResponseBody 
public String[] postFile(
     @PathVariable(name = "fileName") String fileName, 
     List<MultipartFile> files, 
     User user 
) throws IOException { 
    return new String[]{ 
      fileName, 
      user.getUsername(), 
      files.stream() 
        .map((f)-> f.getOriginalFilename()) 
        .reduce("", (e, f)->e.concat(f).concat(", ")) 
    }; 
} 

,我嘗試幾個文件上傳到List<MultipartFile> files

Sample output from Postman

作爲圖像中示出,既filesuser數據自動映射,並且沒有需要任何註解。

希望它有幫助。

相關問題