JavaScript无法在上载前重命名文件

JavaScript无法在上载前重命名文件,javascript,reactjs,amazon-s3,Javascript,Reactjs,Amazon S3,我正在尝试将文件上载到aws s3。在上传之前,我想通过在文件名中添加时间戳来重命名它。但我得到了一个错误,因为“无法分配给对象“#”的只读属性“name” 这是密码 let file = e.target.files[0]; let timeStamp = (new Date()).getTime(); let fileExt = file.name.split('.')[file.name.split('.').length-1]; let fileNameWithoutExt = file

我正在尝试将文件上载到aws s3。在上传之前,我想通过在文件名中添加时间戳来重命名它。但我得到了一个错误,因为“无法分配给对象“#”的只读属性“name”

这是密码

let file = e.target.files[0];
let timeStamp = (new Date()).getTime();
let fileExt = file.name.split('.')[file.name.split('.').length-1];
let fileNameWithoutExt = file.name.replace(`.${fileExt}`,'');
let newFileName = fileNameWithoutExt + '_' + timeStamp + '.' + fileExt;
file.name = newFileName;

是的,将其设置为只读似乎是一个奇怪的规则,但它就是这样。。。 所以解决方法,不是那么难,是从以前的文件对象创建一个新的文件对象

var previous_file=新文件(['foo'],'file.txt',{type:'text/plain'});
试一试{
previous_file.name='hello.txt';
}
捕获(e){}
console.log(上一个文件名);//没用
//所以我们只是从中创建一个新文件。。。
var new_file=新文件([previous_file],'hello.txt');
console.log(新的_文件)
  • 无法更改已创建文件的名称
  • 您可以创建 具有新文件名的文件的新实例,如上面的帖子中所述。但是 并非所有浏览器都支持文件构造函数(IE和EDGE不支持)
  • 你可以把新的 amazon上载的密钥属性的文件名
而不是
key=“folder1/folder2/${filename}”
您可以编写
key=“folder1/folder2/youfilename.txt”

FormData的append()方法接受第三个可选文件名参数

// new file name as a variable with timestamp
const newName = new Date().getTime() + event.target.files[0].name;  
fd.append('file[]', event.target.files[0], newName);

name
Object
Object中预定义的属性,请尝试分配不同的属性名称,如
fileName
Related Thank@Alex。但我想在浏览器本身中执行此操作。@pratik-n是的,您可以(创建新文件),但这在IE和EDGE上不起作用:)@pratik-n您可以更改浏览器端的键变量吗?谢谢@kaido。以上IE 11支持,谢谢@kaido。为s3参数设置关键变量对我来说是可行的。如果不使用aws s3,您的解决方案可能会有所帮助。简单明了。谢谢@Theotonio