Firebase存储Put无法获取对象

Firebase存储Put无法获取对象,firebase,firebase-storage,Firebase,Firebase Storage,使用SDK的WEB版本将映像存储到Firebase存储。文件确实已上载,但在尝试获取下载URL时仍会收到以下消息 code:"storage/object-not-found" message:"Firebase Storage: Object 'rainbow_photos/daniel.jpg' does not exist." name:"FirebaseError" serverResponse:"{↵ "error": {↵ "code": 404,↵ "message"

使用SDK的WEB版本将映像存储到Firebase存储。文件确实已上载,但在尝试获取下载URL时仍会收到以下消息

code:"storage/object-not-found"
message:"Firebase Storage: Object 'rainbow_photos/daniel.jpg' does not exist."
name:"FirebaseError"
serverResponse:"{↵  "error": {↵    "code": 404,↵    "message": "Not Found.  Could not get object"↵  }↵}"
但是文件daniel.jpg确实存储在rainbow_photos文件夹中

下面是我们放置文件的方式:

rainbowPhotoUploader.addEventListener('change', function(e){
    //Get file
    var file = e.target.files[0];
    //Create a storage ref
    var storageRef = firebase.storage().ref('rainbow_photos/' + file.name);
    //Upload file
    storageRef.put(file);
    //Get URL and store to pass
    storageRef.getDownloadURL().then(function(result){
        $('#rainbowPhotoURL').val(result);
    });   
  });

上传后,您将立即获得下载链接,但尚未完成

完成上传后,执行此操作以获取链接:

rainbowPhotoUploader.addEventListener('change', function(e){
//Get file
var file = e.target.files[0];
//Create a storage ref
var storageRef = firebase.storage().ref('rainbow_photos/' + file.name);
//Upload file
storageRef.put(file).then(function(result){
    //Get URL and store to pass
    storageRef.getDownloadURL().then(function(result){
        $('#rainbowPhotoURL').val(result);
    }); 
});
});

基本上正如Austin所说,除了我们很聪明(我们很聪明,相信我!),我们会在上传后在promise中返回下载URL,这样您就不必进行第二次获取:

rainbowPhotoUploader.addEventListener('change', function(e){
  //Get file
  var file = e.target.files[0];
  //Create a storage ref
  var storageRef = firebase.storage().ref('rainbow_photos/' + file.name);
  //Upload file
  storageRef.put(file).then(function(snapshot){
    $('#rainbowPhotoURL').val(snapshot.downloadURL);
  });
});
第二次使用“then”将在成功上载文件后触发。 对不起,我的英语不好。

用于firebase@6.4(前端SDK)

❌ 下面的代码将抛出错误代码:“未找到存储/对象” 但奇怪的是文件实际上已经上传了

/**
*@param{String}路径名文件夹/文件名
*@param{Object}文件e.target.files[0]
*@returns{Promise}解析文件的URL
*/
export const uploadFile=(路径名,文件)=>{
const task=firebase.storage().ref(路径名).put(文件);
返回task.snapshot.ref.getDownloadURL();
};
✅ 中的一个工作示例firebase@6.4

/**
*@param{String}路径名文件夹/文件名
*@param{Object}文件e.target.files[0]
*@returns{Promise}解析文件的URL
*/
export const uploadFile=(路径名,文件)=>
新承诺((解决、拒绝)=>{
const task=firebase.storage().ref(路径名).put(文件);
const taskProgress=快照=>{};
const taskError=拒绝;
const taskCompleted=()=>{
task.snapshot.ref
.getDownloadURL()
.然后(解决)
.捕获(拒绝);
};
task.on(“状态已更改”,taskProgress,taskError,taskCompleted);
});

您是如何调试的?我从来没有想到上传还没有完成是的,我已经有一段时间没有用过这个了,但是当我试图在上传后立即获取内容,并且内容不存在并且是一个空文件时,可能会遇到这个问题。
rainbowPhotoUploader.addEventListener('change', function(e) {

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

        var storageRef = firebase.storage().ref('rainbow_photos/' + file.name);

        storageRef.put(file).then(function(snapshot) {

            // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
            var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;

            console.log('Upload is ' + progress + '% done');

        }).then(function() {
            // Upload completed successfully, now we can get the download URL
            storageRef.getDownloadURL().then(function(downloadURL) {
                console.log('File available at', downloadURL);
            });
        });
    });