2016-07-31 2 views
0

Следующий код, похоже, не регистрирует URL загрузки загружаемого файла и дает мне следующую ошибку.getDownloadURL не работает правильно - Firebase Storage (Web)

GET ... {URL, который не загрузить URL} ... 404()

Это мой код.

 //Get image 
    var file = a.target.files[0]; 

    //create a storage reference 
    var storageRef = firebase.storage().ref('images/' + file.name); 

    //store the image 
    var task = storageRef.put(file); 

    var storage = firebase.storage(); 
    storageRef.child('images/'+file.name).getDownloadURL().then(function(url) { 
     console.log(url);   
     }).catch(function(error) { 
     // Handle any errors 
     }); 

Так как я могу получить downloadURL?

ответ

1

Загрузка файла - это асинхронная операция, которая может занять некоторое время. Поскольку ваш код не обрабатывает это, вы загружаете URL-адрес загрузки, когда файл еще не завершил загрузку.

Из documentation for uploading files to Firebase Storage приходит пример:

// File or Blob, assume the file is called rivers.jpg 
var file = ... 

// Upload the file to the path 'images/rivers.jpg' 
// We can use the 'name' property on the File API to get our file name 
var uploadTask = storageRef.child('images/' + file.name).put(file); 

// Register three observers: 
// 1. 'state_changed' observer, called any time the state changes 
// 2. Error observer, called on failure 
// 3. Completion observer, called on successful completion 
uploadTask.on('state_changed', function(snapshot){ 
    // Observe state change events such as progress, pause, and resume 
    // See below for more detail 
}, function(error) { 
    // Handle unsuccessful uploads 
}, function() { 
    // Handle successful uploads on complete 
    // For instance, get the download URL: https://firebasestorage.googleapis.com/... 
    var downloadURL = uploadTask.snapshot.downloadURL; 
}); 

Вы можете видеть, что этот пример получает URL загрузки после загрузки завершен.

Если вы не заботитесь о прогрессе и неудачи, он может быть столь же просто, как:

uploadTask.on('state_changed', null, null, function() { 
    var downloadURL = uploadTask.snapshot.downloadURL; 
}); 
+0

Спасибо за код. Я действительно знал, что функция loadURL не дает мне URL-адрес, который я хотел, потому что потребовалось время для загрузки файла, но я просто не знал, как должен выглядеть код. Во всяком случае, Большое спасибо. –