在使用 Firebase 存储时,如果你发现上传任务的进度监听器没有触发,可能是由于以下几个原因:
以下是一个完整的示例,展示了如何在 Firebase 存储中上传文件并正确附加进度监听器。
首先,确保你已经初始化了 Firebase 应用。以下是一个示例,展示了如何在 Node.js 环境中初始化 Firebase:
const firebase = require('firebase/app');
require('firebase/storage');
// 初始化 Firebase 应用
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
};
firebase.initializeApp(firebaseConfig);
const storage = firebase.storage();
以下是一个示例,展示了如何上传文件并附加进度监听器:
const file = ...; // 要上传的文件对象
const storageRef = storage.ref();
const uploadTask = storageRef.child('uploads/myfile.txt').put(file);
// 监听上传任务的状态变化
uploadTask.on('state_changed',
(snapshot) => {
// 获取上传进度
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log('Upload is ' + progress + '% done');
switch (snapshot.state) {
case firebase.storage.TaskState.PAUSED: // 或 'paused'
console.log('Upload is paused');
break;
case firebase.storage.TaskState.RUNNING: // 或 'running'
console.log('Upload is running');
break;
}
},
(error) => {
// 处理上传错误
switch (error.code) {
case 'storage/unauthorized':
console.error('User doesn\'t have permission to access the object');
break;
case 'storage/canceled':
console.error('User canceled the upload');
break;
case 'storage/unknown':
console.error('Unknown error occurred, inspect error.serverResponse');
break;
}
},
() => {
// 上传完成后的处理
uploadTask.snapshot.ref.getDownloadURL().then((downloadURL) => {
console.log('File available at', downloadURL);
});
}
);
如果上传任务的监听器仍然没有触发,请检查以下几点:
file
变量是一个有效的文件对象。添加更多的日志记录来调试问题。例如,可以在上传任务开始之前和之后添加日志:
console.log('Starting upload task');
const uploadTask = storageRef.child('uploads/myfile.txt').put(file);
console.log('Upload task started');
通过这些日志,你可以更好地了解代码的执行顺序和可能的问题。
领取专属 10元无门槛券
手把手带您无忧上云