Spring @RequestParam 无法使用 HTML FormData
Spring @RequestParam is not working with HTML FormData
我想使用 angularjs 作为前端,使用 Spring Rest 作为后端来上传文件。这是我的前端代码:
var data = evt.target.result;
var formData = new FormData();
formData.set("fileId", 1);
formData.set("file", data);
$http({method: "POST", url: "/file", data: formData, headers : {"Content-Type": undefined}, transformRequest: angular.identity}).success(function() {
console.log("hi");
}).error(function(reason) {
console.log(reason);
});
这是我的后端代码:
@RequestMapping(value = "/file", method = POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Void> uploadFile(@RequestPart("file") MultipartFile file) {
我认为我的代码应该可以正常工作,但实际上,我一直收到错误 400,指出 "Required request part 'file' is not present".
有什么想法吗?谢谢。
这是来自 firebug 的数据:
-----------------------------5045635351933894389797998578
Content-Disposition: form-data; name="fileId"
1
-----------------------------5045635351933894389797998578
Content-Disposition: form-data; name="file"
%PDF-1.7
%äãÃÃ’
4 0 obj
<</Type/XObject
/Subtype/Form
/FormType 1
/Matrix[1 0 0 1 0 0]
/BBox[0 0 612 792]
/Resources<</ExtGState<</GS0 5 0 R>>/ProcSet[/PDF/ImageC]/Properties<</MC0 6 0 R>>/XObject<</Im0 7 0
R>>>>/Filter/FlateDecode/Length 343>>
stream
H‰”“ÃNÃ0†ïy
¿@SDZ“øʆ&;ð
-----------------------------5045635351933894389797998578--
我们可以清楚的看到参数名,一个是fileId,一个是file。
我解决了!错误是我试图上传一个文件的数据,而不是整个文件,其中包括数据、文件名和其他有用的属性。之前的代码如下:
var data = evt.target.result;
var formData = new FormData();
formData.append("fileId", 1);
formData.append("file", data);
我改成如下:
var formData = new FormData();
formData.append("fileId", 1);
formData.append("file", file);
文件变量引用 HTML5 文件对象,而前一个引用文件的二进制数据。
我想使用 angularjs 作为前端,使用 Spring Rest 作为后端来上传文件。这是我的前端代码:
var data = evt.target.result;
var formData = new FormData();
formData.set("fileId", 1);
formData.set("file", data);
$http({method: "POST", url: "/file", data: formData, headers : {"Content-Type": undefined}, transformRequest: angular.identity}).success(function() {
console.log("hi");
}).error(function(reason) {
console.log(reason);
});
这是我的后端代码:
@RequestMapping(value = "/file", method = POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Void> uploadFile(@RequestPart("file") MultipartFile file) {
我认为我的代码应该可以正常工作,但实际上,我一直收到错误 400,指出 "Required request part 'file' is not present".
有什么想法吗?谢谢。
这是来自 firebug 的数据:
-----------------------------5045635351933894389797998578
Content-Disposition: form-data; name="fileId"
1
-----------------------------5045635351933894389797998578
Content-Disposition: form-data; name="file"
%PDF-1.7
%äãÃÃ’
4 0 obj
<</Type/XObject
/Subtype/Form
/FormType 1
/Matrix[1 0 0 1 0 0]
/BBox[0 0 612 792]
/Resources<</ExtGState<</GS0 5 0 R>>/ProcSet[/PDF/ImageC]/Properties<</MC0 6 0 R>>/XObject<</Im0 7 0
R>>>>/Filter/FlateDecode/Length 343>>
stream
H‰”“ÃNÃ0†ïy
¿@SDZ“øʆ&;ð
-----------------------------5045635351933894389797998578--
我们可以清楚的看到参数名,一个是fileId,一个是file。
我解决了!错误是我试图上传一个文件的数据,而不是整个文件,其中包括数据、文件名和其他有用的属性。之前的代码如下:
var data = evt.target.result;
var formData = new FormData();
formData.append("fileId", 1);
formData.append("file", data);
我改成如下:
var formData = new FormData();
formData.append("fileId", 1);
formData.append("file", file);
文件变量引用 HTML5 文件对象,而前一个引用文件的二进制数据。