【问题标题】:Uploading files using the Spring Framework and jquery-upload-file plugin issue使用 Spring Framework 和 jquery-upload-file 插件问题上传文件
【发布时间】:2015-03-02 14:15:03
【问题描述】:

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

在服务器端,我使用 Spring 框架,并按照以下 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
}

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

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

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

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

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

【问题讨论】:

标签: ajax spring file-upload jquery-file-upload


【解决方案1】:

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

@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 文件上传。如果由于某种原因确实如此 不适合您,您可以尝试通过检查 HTTP 来隔离问题 jQuery File Upload(例如,使用 Fiddler)发出的请求,并从 Spring 开始调试响应 DispatcherServlet。

【讨论】:

  • 这在尝试使用带有 axios 库的 Ajax 请求将文件上传到 Sprint Boot 后端时也很有效。
猜你喜欢
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多