为了账号安全,请及时绑定邮箱和手机立即绑定

可以通过更改可写属性描述符来更改JavaScript文件名吗?

可以通过更改可写属性描述符来更改JavaScript文件名吗?

侃侃无极 2021-03-02 16:14:55
我需要在上传文件之前更改文件名,但该属性为只读:https://developer.mozilla.org/zh-CN/docs/Web/API/File所以this.imageFile.name = newFileName;不起作用。我在这里查看了其他问题,但答案都是-“使用文件构造器创建新文件”。例如var file = new File(['foo'], 'newName', {type:'img/jpg'});但是构造函数在IE或Edge中不可用。最后,我发现表单数据在caniuse.com上具有良好的支持,您可以提供一个新的文件名,如下所示:var newFileName = file.filename + "new";var formData = new FormData();formData.append('file', file, newFileName);在这两种解决方案之间,我尝试了另一种解决方案:Object.defineProperty(this.imageFile, 'name', {     writable: true});this.imageFile.name = newFileName; 显然,这是一个hack,但它确实有效。我决定不使用它,因为FormData append方法采用文件名来解决此问题,如果我可以手动更改描述符,并且它可以正常工作,我只是不明白为什么它是一个只读属性。
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我只是不明白为什么它是一个只读属性...


因为规范是这样说的:


用户代理应努力在进行引用时将File对象的快照状态设置为磁盘上基础存储的状态。


interface File : Blob {

  readonly attribute DOMString name;

  readonly attribute long long lastModified;

};

该name属性表示当前文件名,因此没有能力在File对象中对其进行更改。


虽然,当您FormData.append()使用3rd参数将此文件的内容发送到服务器时,此操作不会更改文件状态或它表示的基础存储。


查看完整回答
反对 回复 2021-04-15
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号