gpt4 book ai didi

javascript - 是否可以通过更改可写属性描述符来更改 JavaScript 文件名?

转载 作者:行者123 更新时间:2023-12-05 07:24:23 24 4
gpt4 key购买 nike

我需要在上传文件之前更改文件名,但属性是只读的:

https://developer.mozilla.org/en-US/docs/Web/API/File

所以

this.imageFile.name = newFileName;

不起作用。

我在这里查看了其他问题,但答案都是——“使用文件构造函数创建一个新文件”。

例如

var file = new File(['foo'], 'newName', {type:'img/jpg'});

但是构造函数在IE和edge中是不可用的。

最后我发现 form data 在 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 附加方法需要一个文件名来解决这个问题,我只是不明白为什么它是只读属性,如果我可以手动更改描述符并且它工作正常。

最佳答案

I just dont understand why it is a readonly property...

因为 specification是这样说的:

User agents should endeavor to have a File object’s snapshot state set to the state of the underlying storage on disk at the time the reference is taken.

interface File : Blob {
readonly attribute DOMString name;
readonly attribute long long lastModified;
};

name 属性表示当前文件名,因此在 File 对象中更改它没有意义。

虽然,当您使用带第三个参数的 FormData.append() 将此文件的内容发送到服务器时,此操作不会更改文件状态,也不会更改它所代表的底层存储。

关于javascript - 是否可以通过更改可写属性描述符来更改 JavaScript 文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com