在JavaScript中重命名File()对象

在JavaScript中重命名File()对象,javascript,file,rename,file-rename,Javascript,File,Rename,File Rename,我希望我的用户能够在上传文件之前对其重新命名 我有一个Javascript中的文件对象,它有一个已设置的名称属性,但我希望它能够被更新。现在执行明显的myFile.name=“new name.txt”返回一个错误,即此属性为只读 更改JavaScript文件对象的名称属性的最佳方法是什么?您可以添加一个带有名称的输入标记,并对用户隐藏名称属性。在服务器上,只需使用输入作为名称,并忽略默认名称。尝试以下操作: var blob = file.slice(0, file.size, 'image/

我希望我的用户能够在上传文件之前对其重新命名

我有一个Javascript中的
文件
对象,它有一个已设置的
名称
属性,但我希望它能够被更新。现在执行明显的
myFile.name=“new name.txt”
返回一个错误,即此属性为只读


更改JavaScript
文件
对象的
名称
属性的最佳方法是什么?

您可以添加一个带有名称的
输入
标记,并对用户隐藏
名称
属性。在服务器上,只需使用
输入
作为名称,并忽略默认名称。

尝试以下操作:

var blob = file.slice(0, file.size, 'image/png'); 
var newFile = new File([blob], 'name.png', {type: 'image/png'});
注:
这是针对图像类型的,您必须使用实际使用的类型更改此类型。

响应Alexander Taborda的回答。。。slice()的第一个和第二个参数是应构成新Blob的原始Blob的开始字节和结束字节。说:

var blob = file.slice(0,-1);
您不是说“复制到文件末尾”(我认为这是您的目标),而是说“复制整个blob,除了最后一个字节”

正如@carestad所说

var blob = file.slice(0, file.size);
在创建新文件()之后,对象应使用新名称创建精确副本

请注意,对于png,如果没有最后一个字节,文件将被视为无效


From:

既然
file.name
是只读属性,我发现这是在浏览器中重命名文件对象的最佳方法:

const myNewFile = new File([myFile], 'new_name.png', {type: myFile.type});
你可以用

filesystem.moveTo(newParent[,newName][,successCallback][,errorCallback])

重命名文件或目录

来自MDN:

我已经有了一个客户端
,供用户输入名称。就我所知,这实际上可能是唯一可行的选择:(仍在寻找…是的,,,
文件
对象是不可变的。这样做似乎是最好的方法,我可以拼凑一个黑客来提取文件数据,将其转换为具有新名称的
Blob
,然后将其转换为
文件
,但走这条路要容易得多。这并不能真正回答问题。你可以dn没有说如何重命名文件对象或如何创建具有不同名称的对象的副本。您基本上说OP应该创建变通方法…我会说,如果您使用的是文件对象,请使用:
var blob=file.slice(0,file.size,file.type)
Clean,但
file()IE&Edge plus Opera for Android不支持构造函数
。谢谢。它会复制内存吗?还是只使用指向原始文件引用的现有blob的指针?@AkshayKhot你能找到这个吗?我也想知道它是否在内存中复制。这看起来不会增加我的内存使用。@ChrisLang,是的,我认为新文件只是指向现有的blob,而不是复制它。这在MDN中被标记为实验性的和不推荐的。也许这就是为什么这个答案在几年内没有得到投票的原因。由于JavaScript不安全,它不应该直接访问客户机文件系统,尽管不幸的是存在很多漏洞.