使用 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.
我无法通过 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.