2015-01-05 33 views
2

我在通過AJAX從我的web客戶端向我的服務器上傳文件時遇到問題。我使用以下的jQuery庫在客戶端做文件上傳:https://github.com/hayageek/jquery-upload-file使用Spring框架和jquery-upload-file插件問題上傳文件

在服務器端,我使用Spring框架和我一直遵守以下教程建立自己的服務:https://spring.io/guides/gs/uploading-files/

起初,我的服務器的方法看起來像這樣(文件定義爲@RequestParam):

@RequestMapping(value="/upload", method=RequestMethod.POST) 
public @ResponseBody String handleFileUpload(@RequestParam("file") MultipartFile file){ 
    //functionality here 
} 

但每次提交上傳表單時,我都收到了來自服務器的錯誤請求消息,並且我的handleFileUpload()方法從未被調用過。

在那之後,我意識到該文件在送交作爲請求參數,所以我定義爲file @RequestBody ,現在我的方法是這樣的:

@RequestMapping(value="/upload", method=RequestMethod.POST) 
public @ResponseBody String handleFileUpload(@RequestBody("file") MultipartFile file){ 
    //functionality here 
} 

現在handleFileUpload()被稱爲每次上傳表單已提交,但每次我想操縱文件時,我都會收到NullPointerException

我想避免提交表單默認情況下,我只是想通過AJAX直接到服務器。有人知道這裏會發生什麼嗎?

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be - 刪除 - 從帖子)。順便說一句,這是「預先感謝」,而不是「感謝先進」。 –

+0

@JohnSaunders我知道,這是我已經停止在我的最新帖子中做的事情,無論如何謝謝你給的建議。 – charliebrownie

回答

4

,你可以嘗試改變方法的簽名

@RequestMapping(value="/upload", method=RequestMethod.POST) 
public @ResponseBody String handleFileUpload(MultipartHttpServletRequest request){ 
    Iterator<String> iterator = request.getFileNames(); 
    while (iterator.hasNext()) { 
     String fileName = iterator.next(); 
     MultipartFile multipartFile = request.getFile(fileName); 
     byte[] file = multipartFile.getBytes(); 
     ... 
    } 
    ... 
} 

這一點也適用於我們的web應用程序的jQuery文件上傳。如果由於某種原因, 不適用於您,您可以嘗試通過檢查由jQuery文件上傳(例如,Fiddler)發出的HTTP 請求並調試從Spring DispatcherServlet開始的響應。