Spring 3.0 FileUpload仅使用POST吗?


问题内容

我正在尝试使用Spring 3上传一个参数的文件。

这是我的控制器方法,应启用此服务:

@RequestMapping(value="/{id}", method = RequestMethod.PUT, headers="content-type=multipart/form-data")
public ResponseEntity<String> uploadImageWithJsonParamater(@PathVariable("id") Long id, @RequestParam String json, @RequestParam MultipartFile customerSignFile) {
    //...
}

问题是服务器无法分派给该方法:MissingServletRequestParameterException:必需的字符串参数’json’不存在

如果我将RequestMethod从PUT更改为POST,一切都很好。那么有人知道这个问题吗?

似乎不允许通过PUT传输表单数据。

我进行了一点调试,以下方法在PUT情况下返回false,但在POST情况下返回true:

public boolean isMultipart(HttpServletRequest request) {
    return (request != null && ServletFileUpload.isMultipartContent(request));
}

我将不胜感激任何帮助!

提前致谢!


问题答案:

您无法按照HTML标准通过PUT发送表单数据。您只能通过PUT发送文件,在这种情况下,与POST相比,它们的发送效率更高(因为您不再拥有所有的多部分开销),但是为了让您PUT侦听服务器端组件实际接收文件通过PUT,您必须确保实际向其发送了PUT命令(例如,通过javascript)。这是一个使用JQuery的示例:

$('#file_upload').fileUpload({
    namespace: 'file_upload',
    url: '/path',
    method: 'PUT'
});