在JavaScript中重命名File()对象

时间:2015-06-09 13:46:55

标签: javascript file rename file-rename

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

我在Javascript中有一个File对象,它已经设置了name属性,但我希望能够更新它。现在做明显的myFile.name = "new-name.txt"会返回一个错误,该属性是只读的。

更改JavaScript name对象的File属性的最佳方法是什么?

5 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:7)

试试这个:

var blob = file.slice(0, file.size, 'image/png'); 
var newFile = new File([blob], 'name.png', {type: 'image/png'});

请注意: 这是针对图片类型的,您必须使用您实际使用的类型更改此类型。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

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

var blob = file.slice(0,-1);

你不是说"复制到文件的末尾" (我认为这是你的目标),你说"复制整个blob,除了最后一个字节"。

正如@carestad所说

var blob = file.slice(0, file.size);

然后创建一个新的File()对象应该创建一个具有新名称的精确副本。

请注意,使用png时,如果没有最后一个字节,该文件将被视为无效。

来自:https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice

答案 4 :(得分:0)

您可以使用

FileSystemEntry.moveTo(newParent[, newName][, successCallback][, errorCallback]);

重命名文件或目录。

来自MDN: https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry/moveTo