我希望我的用户在上传文件之前能够重新命名文件。
在Javascript中,我有一个File
对象,它已经设置了一个name
属性,但我希望可以更新这个属性。目前,明显的做法 myFile.name = "new-name.txt"
返回一个错误,指出该属性是只读的。
如何更改JavaScript File
对象上的name
属性是最好的方法?
我希望我的用户在上传文件之前能够重新命名文件。
在Javascript中,我有一个File
对象,它已经设置了一个name
属性,但我希望可以更新这个属性。目前,明显的做法 myFile.name = "new-name.txt"
返回一个错误,指出该属性是只读的。
如何更改JavaScript File
对象上的name
属性是最好的方法?
现在file.name
是只读属性,我发现以下方法是在浏览器中重命名文件对象的最佳方法:
现在file.name
是只读属性,我发现以下方法是在浏览器中重命名文件对象的最佳方法:
const myNewFile = new File([myFile], 'new_name.png', {type: myFile.type});
试试这个:
var blob = file.slice(0, file.size, 'image/png');
var newFile = new File([blob], 'name.png', {type: 'image/png'});
注意: 这是用于图片类型的,您需要将此类型更改为您实际使用的类型。
var blob = file.slice(0, file.size, file.type)
。 - carestad您可以添加一个带有名称的 input
标签,并将 name
属性隐藏起来,不让用户看到。在服务器端,只需使用该 input
作为名称并忽略默认名称即可。
<input />
,供用户输入名称。目前来看,这可能是唯一可行的选择:( 但我仍在寻找其他选项... - FiniteLooperFile
对象是不可变的。这样做似乎是最好的方法,我可以拼凑一个 hack 来提取文件数据,将其转换为具有新名称的 Blob
,然后将其转换为 File
,但是走这条路线要容易得多。 - FiniteLooper回应Alexander Taborda的答案... Blob.slice()的第一个和第二个参数是原始blob中应该形成新blob的起始字节和结束字节。具体来说:
var blob = file.slice(0,-1);
var blob = file.slice(0, file.size);
创建一个新的File()对象,然后跟随着将创建一个具有新名称的精确副本。
请注意,在处理png文件时,如果没有最后一个字节,则该文件将被视为无效。
来自:https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice
let newF = {
...f,
name: f.name.toString().replace(/[^0-9A-Za-z.\-_()]/gi, '')
};
FileSystemEntry.moveTo(newParent[, newName][, successCallback][, errorCallback]);
来重命名文件或目录。
File()构造函数
。 - Meettya