从多个文件上传 Firebase 存储中获取下载 url

Posted

技术标签:

【中文标题】从多个文件上传 Firebase 存储中获取下载 url【英文标题】:get download url from multiple file upload firebase storage 【发布时间】:2017-07-08 05:02:45 【问题描述】:

我是 firebase 和 angularjs 的新手,我在从 firebase 存储中获取下载 url 并将它们存储在 firebase 实时数据库中时遇到了困难。

我能够将多个文件上传到 Firebase 存储。问题是当我将下载 url 存储到 firebase 实时数据库中时,所有数据库 url 值都是相同的。它应该根据每个文件的下载 URL 有所不同。

这是我的脚本:

$scope.submitPhotos = function(file)
  console.log(file);
  var updateAlbum = [];
  for (var i = 0; i < file.length; i++)                 
    var storageRef=firebase.storage().ref(albumtitle).child(file[i].name);
    var task=storageRef.put(file[i]);

    task.on('state_changed', function progress(snapshot)
      var percentage=( snapshot.bytesTransferred / snapshot.totalBytes )*100;
      if (percentage==100)
      storageRef.getDownloadURL().then(function(url) 
        var galleryRef = firebase.database().ref('gallery/'+albumkey);
        var postkey = firebase.database().ref('gallery/'+albumkey).push().key;       
        updateAlbum=img:url;
        firebase.database().ref('gallery/'+ albumkey+'/'+postkey).update(updateAlbum);
      );
    ;
  )  
  ;
;

如您所见,我能够将 url 存储到数据库中,但所有 url 都是相同的。我需要的是每个密钥存储每个不同的存储链接。

任何帮助表示赞赏。谢谢

【问题讨论】:

【参考方案1】:
function uploadImg(file,i) 

return new Promise((resolve,reject)=>


var storageRef=firebase.storage().ref("store-images/"+file[i].file.name);
             task = storageRef.put(file[i].file);

            task.on('state_changed', function progress(snapshot)

            var percentage=( snapshot.bytesTransferred / snapshot.totalBytes )*100;
            console.log(percentage);

            // use the percentage as you wish, to show progress of an upload for example
            , // use the function below for error handling
            function (error)   
              console.log(error);
            , 
            function complete ()  //This function executes after a successful upload
            

                    task.snapshot.ref.getDownloadURL().then(function(downloadURL) 

                        resolve(downloadURL)

                    );


            );  

    )




async function putImage(file) 

    for (var i = 0; i < file.length; i++) 

            var dd = await uploadImg(file,i);

            firebase.database().ref().child('gallery').push(dd);
        

    

【讨论】:

请考虑添加至少一些解释,好像为什么这回答了这个问题 工作真棒。非常感谢【参考方案2】:

尝试使用下面的代码:

$scope.submitPhotos = function(file)
  console.log(file);
  var updateAlbum = [];
  for (var i = 0; i < file.length; i++)                 
    var storageRef=firebase.storage().ref(albumtitle).child(file[i].name);
    var task=storageRef.put(file[i]);

    task.on('state_changed', function progress(snapshot)
    
      var percentage=( snapshot.bytesTransferred / snapshot.totalBytes )*100;
      // use the percentage as you wish, to show progress of an upload for example
    , // use the function below for error handling
     function (error)   

          switch (error.code) 
            case 'storage/unauthorized':
              // User doesn't have permission to access the object
              break;

            case 'storage/canceled':
              // User canceled the upload
              break;

            case 'storage/unknown':
              // Unknown error occurred, inspect error.serverResponse
              break;
          

      , function complete ()  //This function executes after a successful upload
      
        let dwnURL = task.snapshot.downloadURL;
        let galleryRef = firebase.database().ref('gallery/'+albumkey);
        let postkey = firebase.database().ref('gallery/'+albumkey).push().key;       
        updateAlbum=img:dwnURL;
        firebase.database().ref('gallery/'+ albumkey+'/'+postkey).update(updateAlbum);
      );  


  ;
;

一切顺利!

【讨论】:

还是不行。我用你的代码得到的结果是firebase数据库只存储上传到firebase存储的第一张图片的url。我需要存储在 firebase 数据库中的文件的所有下载 url 您好,我对上面的代码做了一些代码修改;删除了几行,根据需要进行调整。您能否确认“文件”数组在提交时包含多个文件?

以上是关于从多个文件上传 Firebase 存储中获取下载 url的主要内容,如果未能解决你的问题,请参考以下文章

从使用Cloud Functions for Firebase上传的文件中获取下载URL

Angular 6 - 上传后获取 Firebase 存储文件的下载 URL

从 firebase 下载文件并上传到 Stripe 进行身份验证

如何从 Firebase 存储中获取调整大小的图片下载 URL

将多个图像存储到 Firebase 并获取 url

如何在 firebase 存储上上传多个文件并将访问 url 和元数据作为 json 或 csv 文件获取? [关闭]