使用 Spring 框架和 jquery-upload-file 插件上传文件问题

Uploading files using the Spring Framework and jquery-upload-file plugin issue

我无法通过 AJAX 从我的网络客户端上传文件到我的服务器。我在客户端使用以下 jQuery 库来上传文件:https://github.com/hayageek/jquery-upload-file

在服务器端,我正在使用 Spring Framework 并且我遵循以下 Spring 教程来构建我的服务: https://spring.io/guides/gs/uploading-files/

起初,我的服务器方法看起来像这样(file 被定义为 @RequestParam):

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

但是每次我提交上传表单时,我都会收到来自服务器的 Bad Request 消息,而且我的 handleFileUpload() 方法从未被调用过。

之后,我意识到文件没有作为请求参数发送,所以我将 file 定义为 @RequestBody,现在我的方法如下所示:

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

现在每次提交上传表单时都会调用 handleFileUpload(),但每次我想操作 file 时都会得到 NullPointerException

我想避免默认提交表单,我只想通过 AJAX 直接提交到服务器。有人知道这里会发生什么吗?

您可以尝试将方法的签名更改为

@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();
        ...
    }
    ...
}

这适用于我们网络应用程序中的 jQuery 文件上传。如果出于某种原因这样做 不适合你,你可以尝试通过检查 HTTP 来隔离问题 jQuery 文件上传发出的请求(例如,使用 Fiddler),并调试从 Spring 开始的响应 DispatcherServlet.