Firebase存储文件名更改

时间:2019-12-01 13:59:03

标签: javascript firebase firebase-authentication firebase-storage

我是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);

2 个答案:

答案 0 :(得分:0)

您不能直接更改文件名。但是有一种间接的方法,请检查此question

您希望将用户的UID作为文件名,但是不会在createUserWithEmailAndPassword中得到它,因此您需要将该逻辑添加到onAuthStateChanged方法中。但是onAuthStateChanged每当用户登录时都会被调用,因此您需要构建某种逻辑以仅在用户登录时才执行文件上载方法。

答案 1 :(得分: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) {
        ...