2016-11-21 39 views
0

我已經使用Spring(基於java註釋的配置)構建了一個RESTful服務,我可以通過Curl成功執行該服務。我正在嘗試通過HTML表單提交文件,但這不起作用。從表單發佈REST風格的服務

@RequestMapping(path = "/upload", method = RequestMethod.POST) 
    public String handleFileUpload(@RequestPart(value = "file") MultipartFile file, 
      RedirectAttributes redirectAttributes) { 
     logger.info("POST '/upload'"); 
     storageService.store(file); 
     redirectAttributes.addFlashAttribute("message", 
       "You successfully uploaded " + file.getOriginalFilename() + "!"); 

     return "redirect:/"; 
    } 

而且我通過捲曲提交文件,如下所示:

curl -i -H "Content-Type: multipart/*; boundary=------------BOUNDARY--" -X POST --noproxy localhost, localhost:8080/upload -F "[email protected]" 

即使我的表單提交了文件類型的輸入,這個名字的文件,我通過HTML得到這個錯誤形式

org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present 

從我一直在調查,它似乎好象控制器會期望一個模型屬性,當文件通過HTML表單提交,所以這可能是解決這一好的做法?爲模型屬性包含一個控制器參數,該參數將被檢查爲空值(以區分HTML表單或其他提交方法),還是HTML表單和RESTful服務之間的某種代理控制器會更好?

+0

嗨!在這個'@RequestParam MultipartFile文件'上嘗試改變這個'@RequestPart(value =「file」)MultipartFile file'' – Optio

+0

對不起!這並沒有解決它,Curl和HTML表單的行爲都是一樣的! 這是抱怨,'文件'不存在於請求我認爲... –

回答

0

該服務看起來不錯。對於我在CURL和HTML表單提交中都可以正常工作。

這是我的表格。請嘗試使用此。

<html> 
    <head> 
     <title>Post Tool</title> 
    </head> 
    <body> 
     <h1>Sample Requests</h1>    
     <h2>Upload Document</h2> 
     <form action="http://localhost:8080/upload" method="post" enctype="multipart/form-data"> 
    Choose a file : <input type="file" name="file" multiple/> 

    <input type="submit" value="Upload" /> 
</form> 
    </body> 
</html> 
+0

使用該表單代碼時仍然會出現相同的錯誤 –

+0

什麼是您的春季啓動版本?你使用任何特定的配置? – notionquest

+0

春季開機1.4.2 releae! –

0

經過更多的研究後,我才知道commons multi part resolver與新版本的spring引導不一樣。它努力從表單獲取POST參數。 一個解決方案是使用MultipartResolver接口的StandardServletMultipartResolver實現!