跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教懂 js 代码的朋友一个问题, file 控件内容,如何用 js 来实时修改?
未分類
10 3 月 2020

请教懂 js 代码的朋友一个问题, file 控件内容,如何用 js 来实时修改?

请教懂 js 代码的朋友一个问题, file 控件内容,如何用 js 来实时修改?

資深大佬 : mostkia 49

首先说明一下:
js 不会请求没有上传的文件名称,所以权限应该不会有问题。

遇到的问题:
因为客户需求,有多次选一个或多个文件,满意后点击上传到服务器的需求。所以对应的 FileList 是不断变化的,只有客户点击了“上传”按钮后 FileList 列表内的内容才能算数上传服务器。所以就产生了这个需求,因为 js 代码需要不断根据选择框内已有的内容(客户可能上传的内容不满意又删了的),不断修改 input 上传控件内的信息。但我发现 files 对象似乎是锁定的,key 也是数字类型的,似乎没法修改。具体是我的方法错了吗?

如下图: 请教懂 js 代码的朋友一个问题, file 控件内容,如何用 js 来实时修改?

不过类似 test3.files = test1.files 这种方法又的确额可以生效,说明该属性不是只读的,不知道为什么会这样,期待有懂这方面得朋友解答一下,是否有什么解决方案

大佬有話說 (6)

  • 資深大佬 : ragnaroks

    只需要一个 input,当用户选择文件后,直接在 onload 把文件读到内存
    const filesArray=[];
    input.onload=function(){ filesArray.push(file); }
    用户删除的时候遍历并 slice 即可

  • 資深大佬 : ragnaroks

    你可以参考下各种图床,可以选择很多文件,点了上传才真正上传,没上传之前可以删除,这差不多刚好和你的需求一致

  • 主 資深大佬 : mostkia

    @ragnaroks 好的,谢谢。昨晚查资料查了很久,发现 FileList 列表的确是只读的,只能清空,不能修改。可能是考虑安全性的原因,所以,目前来看,只能自己创建一个文件列表了。通过 formData 方式上传。只不过这样兼容性可能会有影响,而且这样写出来的文件上传组件,无法作为其他表单的一个子功能调用( formData 只能储存在内存里,没法重新写回 input 里,单纯通过 submit 提交)我个人目前更偏向于使用 base64 方法,将需要的文件名、类型、大小之类的信息,和 base64 内容组成 json,实时存入 input 内回传回服务器。只是这种方法无法处理非常大的文件,比如一个 200mb 的文件,编码的时间将会非常的久。但因为是字符串类型的,处理非常方便所以通用性来讲的确更可靠一些。

  • 資深大佬 : Sendya

    题主打算兼容 IE8 吗?

  • 主 資深大佬 : mostkia

    @Sendya 主要是需要能兼容单独使用( ajax )和集成在其他表单中做子功能使用的场景,formData 方式没法反向写入到 input,纯表单模式下使用受限。至于兼容性,目前没考虑太多,能做到兼容自然最好,做不到也没事,一般 IE9 ( win7 系统)都快淘汰了。

  • 資深大佬 : w292614191

    看起来,你需要一个文件上传插件。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具