在Spring 4.0.2版本提供的restful服务中,可以通过注解@RequestPart来同时上传格式化的XML/JSON数据和文件。
后端Controller包含Multipart和JSON的请求写法如下:
@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
consumes = {"multipart/form-data"})
@ResponseBody
public boolean executeSampleService(
@RequestPart("properties") ConnectionProperties properties,
@RequestPart("file") MultipartFile file) {
return projectService.executeSampleService(properties, file);
}
前端写法:
(1)创建一个FormData对象;
(2)使用如下方式追加表单数据到FormData对象:
(a)如果文件已经上传,使用文件类型的输入参数,formData.append("file", document.forms[formName].file.files[0]);
(b) 直接追加,formData.append("file", myFile, "myFile.txt"); //myFile:待上传的文件对象
(3)把JSON数据转化为字符串(使用stringify方法),然后根据此字符串创建一个Blob,该Blob使得
multipart请求中关于表单数据部分的Content-type为application/json,而不是file类型;
(4)发送请求。
formData = new FormData();
formData.append("file", document.forms[formName].file.files[0]);
formData.append('properties', new Blob([JSON.stringify({
"name": "root",
"password": "root"
})], {
type: "application/json"
}));
Request Payload:
Accept:application/json, text/plain, */*
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryEBoJzS3HQ4PgE1QB
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="file"; filename="myfile.txt"
Content-Type: application/txt
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN
Content-Disposition: form-data; name="properties"; filename="blob"
Content-Type: application/json
------WebKitFormBoundaryvijcWI2ZrZQ8xEBN--
参考链接:https://stackoverflow.com/questions/21329426/spring-mvc-multipart-request-with-json