项目需求,实现通过一个后端接口同时接收form表单数据和文件。
- 前端
1
2let formData = new FormData();
3
4let file = document.getElementById("file").files[0];
5formData.append("file", file);
6
7let imageInfo = {
8 "width": "240",
9 "height": "320"
10};
11
12formData.append('imageInfo', new Blob([JSON.stringify(imageInfo)], {type: "application/json"}));
- 后端
1@PostMapping("upload")
2public ImageInfo upload(@RequestPart("file") MultipartFile file,@RequestPart("imageInfo") ImageInfo imageInfo) {
3 System.out.println(imageInfo);
4 return imageInfo;
5}
- 选择多个文件一起上传
- 错误代码
1let formData = new FormData();
2
3formData.append("files",fileList);
浏览器network调试面板中可看到发送的files参数为[object file]形式,而正确的形式应该是[binary]
- 解决方案
1
2fileList.forEach(d=>{
3 formData.append("files",d);
4})
- formData方法append和set区别
- 通过append(key, value)来添加数据
- 如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾
- 通过set(key, value)来设置修改数据
- 如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
1
2formData.get("name");
3formData.getAll("name");
4
5
6
7formData.append("k1", "v1");
8formData.append("k1", "v2");
9
10formData.get("k1");
11formData.getAll("k1");
12
13
14
15formData.append("k1", "v1");
16formData.set("k1", "1");
17formData.getAll("k1");
18
19
20formData.has("k1");
21
22
23formData.delete("k1");
个人笔记记录 2021 ~ 2025