我想在 Vue.js 中更改上传文件的 .name

I want to change the .name of an uploaded filein Vue.js

所以我有这个文件输入,用户可以在其中选择图像。但是一旦我有了这张图片,我只想更改名称,例如,用户上传 "wallpaper_hd_dragonball_z.jpg",我希望它被命名为 "wallpaper.jpg"。这是输入:

<input type="file" @change="uploadImage($event,userDetails.email)">

这是它调用的将图像存储在数据库中的函数:

uploadImage(e, email){
  this.selectedFile = e.target.files[0];
  console.log(this.selectedFile.name);
  var storageRef = firebaseApp.storage().ref(`profilePics/${email}/${this.selectedFile.name}`);
  const task = storageRef.put(this.selectedFile);

  task.on('state_changed',snapshot=>{
    let percentage = (snapshot.bytesTransferred/snapshot.totalBytes)*100;
    this.uploadValue = percentage;
  }, error=>{console.log(error.message)},
  ()=>{this.uploadValue=100;
    task.snapshot.ref.getDownloadURL().then((url)=>{
      this.picture = url;
      console.log(this.picture);
    })
  })
}

基本上我正在尝试的是:

  this.selectedFile.name = "profPic.jpg";
  console.log(this.selectedFile.name);

但是没用。我环顾四周 google,但找不到该怎么做。

您不必更改内存中文件的名称,因为 File 对象的名称 属性 是只读的。

相反,只需重命名您将保存在 Firebase 存储中的文件。

function getFileExtension(fileName) {
  return filename.split('.').pop();
}

//...
  const fileExtension = getFileExtension(this.selectedFile.name);
  var storageRef = firebaseApp.storage().ref(`profilePics/${email}/wallpaper.${fileExtension}`);
  storageRef.put(this.selectedFile);
  // ...

或者创建一个新的文件对象,使用另一个名称。


const myNewFile = new File([this.selectedFile], 'wallpaper.png', {type: myFile.type});
firebaseApp.storage().ref(`profilePics/${email}/${myNewFile.name}`);
storageRef.put(myNewFile);
// ...