JS 里怎么构造 FilesList 对象?

2018-07-03 15:04:12 +08:00
 TomatoYuyuko

想要实现图片可以分先后上传多张(不设置数量上限) 最后 submit 的时候打包成一个数组用 formdata 上传,但是 java 底层好像只能从 FilesList 里解析出 File,用数组的话拿不出来?不是很懂,从前端有方法手动 new 一个 FilesList 么,这个好像是只读的。 有什么推荐的方法么。

3561 次点击
所在节点    问与答
8 条回复
yimity
2018-07-03 15:39:29 +08:00
formData append
TomatoYuyuko
2018-07-03 15:48:11 +08:00
@yimity 这是最后一步,我的意思是 append 的是一个 File 对象没问题,如果是多个文件怎么 append,java 好像只能解析 FilesList 对象里的 File 对象,用 Array 装 File 就没法识别?
TomatoYuyuko
2018-07-03 15:49:25 +08:00
排除每个 File 都对应 append 独立一项的做法,因为文件可能有非常多个
mars0prince
2018-07-03 16:00:22 +08:00
readAsBinaryString 自己加分隔符自己拼
haocity
2018-07-04 09:20:07 +08:00
我是用户上传一张图片上传一次 只保存上传图片返回的 ID 最后提交把 ID 数组返回
flowfire
2018-07-04 10:44:04 +08:00
Object.setProptypeOf 试试?
TomatoYuyuko
2018-07-04 15:17:42 +08:00
@flowfire 可行!感谢 dalao !
yimity
2018-07-07 23:39:57 +08:00
@TomatoYuyuko 如果是多个文件。 则:
selectedFiles 是数组,是 input type=file 选择出来的 file 对象( input onchange 之后 的 event.target.files[0])。
const formData = new FormData();

if (selectedFiles.length) {
selectedFiles.forEach((file) => {
formData.append('Files', file, file.name);
});
}

formData.append('Files', 12345);
formData.append('Files', 67890);

只要是 append 的,都会新增,不会覆盖。append 第一个参数一样的,也不会覆盖。相同的文件传两遍也不会覆盖,不是文件也不会覆盖。

Request payload 就是

------WebKitFormBoundaryUJdNWWlo0O7Pwhcn
Content-Disposition: form-data; name="Files"; filename="name1.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryUJdNWWlo0O7Pwhcn
Content-Disposition: form-data; name="Files"; filename="name2.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryUJdNWWlo0O7Pwhcn
Content-Disposition: form-data; name="Files"; filename="name1.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryUJdNWWlo0O7Pwhcn
Content-Disposition: form-data; name="Files"

12345
------WebKitFormBoundaryUJdNWWlo0O7Pwhcn
Content-Disposition: form-data; name="Files"

67890

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/467792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX