我正在编写一个网络服务,用户可以在其中上传和下载文件到Google Cloud Firebase Storage中的用户目录。
想象一个用户将一个1GB的文件上传到存储中。当用户上传文件时,它已经被其他“进程”可见。
从没有上传统计信息的进程中识别100%上传的文件的常见技术是什么?
本地环境中的一种方法是首先调用文件“my-file. iso.tmp”,然后通过删除后缀来重命名它们,因为重命名操作是原子的。但这似乎不是我的Firebase存储问题的合适解决方案。
任何见解都非常感谢!
没有任何方法可以重命名Firebase存储中的文件。如果您想在所有用户的设备上显示实时上传统计信息,那么使用实时数据库可能是一种方法。
var uploadTask = storageRef.child('images/rivers.jpg').put(file);
uploadTask.on('state_changed',
async (snapshot) => {
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log('Upload is ' + progress + '% done');
await updateUploadStatus(progress)
}
},
(error) => {
// Handle unsuccessful uploads
},
() => {
// Upload completed
await uploadStatus(100)
uploadTask.snapshot.ref.getDownloadURL().then((downloadURL) => {
console.log('File available at', downloadURL);
});
}
);
async function updateUploadStatus(progress) {
const dbRef = firebase.database().ref(`users/${userID}/${fileID}`)
await dbRef.update(progress)
}
updateUploadStatus
将进度更新到实时数据库,您可以在用户已登录(并且处于活动状态)的所有其他设备上监听它,如下所示:
var fileRef = firebase.database().ref(`users/${userID}/${fileID}`);
fileRef.on('value', (snapshot) => {
const data = snapshot.val();
updateFileProgress(data);
});
如何在其他设备上获取fileID
取决于您,或者您可以监听用户/${userID}
节点本身。虽然进度不是100%,但您可以将文件图标或类似的东西置灰。