如何确保 Google Cloud Firebase Storage 中的文件完整性?

How to ensure file integrity in Google Cloud Firebase Storage?

我正在编写一个 Web 服务,用户可以在其中将文件上传和下载到 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 或者您可以收听 users/${userID} 节点本身。虽然进度不是 100%,但您可以使该文件图标或类似的东西变灰。