V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
TomatoYuyuko
V2EX  ›  问与答

JS 里怎么构造 FilesList 对象?

  •  
  •   TomatoYuyuko · Jul 3, 2018 · 3907 views
    This topic created in 2866 days ago, the information mentioned may be changed or developed.

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

    8 replies    2018-07-07 23:39:57 +08:00
    yimity
        1
    yimity  
       Jul 3, 2018 via Android   ❤️ 1
    formData append
    TomatoYuyuko
        2
    TomatoYuyuko  
    OP
       Jul 3, 2018
    @yimity 这是最后一步,我的意思是 append 的是一个 File 对象没问题,如果是多个文件怎么 append,java 好像只能解析 FilesList 对象里的 File 对象,用 Array 装 File 就没法识别?
    TomatoYuyuko
        3
    TomatoYuyuko  
    OP
       Jul 3, 2018
    排除每个 File 都对应 append 独立一项的做法,因为文件可能有非常多个
    mars0prince
        4
    mars0prince  
       Jul 3, 2018   ❤️ 1
    readAsBinaryString 自己加分隔符自己拼
    haocity
        5
    haocity  
       Jul 4, 2018   ❤️ 1
    我是用户上传一张图片上传一次 只保存上传图片返回的 ID 最后提交把 ID 数组返回
    flowfire
        6
    flowfire  
       Jul 4, 2018 via iPhone   ❤️ 1
    Object.setProptypeOf 试试?
    TomatoYuyuko
        7
    TomatoYuyuko  
    OP
       Jul 4, 2018
    @flowfire 可行!感谢 dalao !
    yimity
        8
    yimity  
       Jul 7, 2018   ❤️ 1
    @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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   999 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    ♥ Do have faith in what you're doing.