Firebase存储Put无法获取对象
使用SDK的WEB版本将映像存储到Firebase存储。文件确实已上载,但在尝试获取下载URL时仍会收到以下消息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"
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);
});
});
});