firebase 存储文件名更改

问题描述 投票:0回答:3

我是 firebase 和 Javascript 的新手。
如何将文件名更改为用户的 uid 并将其保存到存储中? 我想在注册成功后上传文件。我应该在 createUserWithEmailAndPassword 或 onAuthStateChanged 中编写函数吗?

function handleFileSelect(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    var file = evt.target.files[0];

    var metadata = {
      'contentType': file.type
    };

    var storage_ref = storage.ref();

    storage_ref.child('userImages/' + user.uid).put(file, metadata).then(function(snapshot) {

      snapshot.ref.getDownloadURL().then(function(url) {
        console.log('File available at', url);
        profile_url = url;

      });
    }).catch(function(error) {

      console.error('Upload failed:', error);

    });



  } // handleFileSelect

  document.getElementById('input_img').addEventListener('change',handleFileSelect, false);
javascript firebase firebase-authentication firebase-storage
3个回答
0
投票

您无法直接更改文件名。但有一种间接的方法可以做到这一点,请检查这个问题

您想要用户的 UID 作为文件名,但您不会在

createUserWithEmailAndPassword
中获得它,因此您需要将该逻辑添加到
onAuthStateChanged
方法中。但是
onAuthStateChanged
每次用户登录时都会被调用,因此您需要构建某种逻辑来仅在用户第一次登录时执行文件上传方法。


0
投票

要针对正在创建的用户帐户采取操作,您可以使用

then

所以类似:

function handleFileSelect(evt) {
  evt.stopPropagation();
  evt.preventDefault();

  firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...    
  }.then(function(credential) {
    var user = credential.user

    var file = evt.target.files[0];

    var metadata = {
      'contentType': file.type
    };

    var storage_ref = storage.ref();

    storage_ref.child('userImages/' + user.uid).put(file, metadata).then(function(snapshot) {

      snapshot.ref.getDownloadURL().then(function(url) {
        ...

0
投票

以防万一有人仍然想知道如何执行此操作:现在在同一个存储桶中重命名非常容易。

对我来说...

const oldFilename = 'folder/file.png';
const newFilename = 'folder/filenew.png';
admin.storage().bucket().file(oldFilename).rename(newFilename);

...对我来说效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.