提问者:小点点

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


我正在编写一个网络服务,用户可以在其中上传和下载文件到Google Cloud Firebase Storage中的用户目录。

想象一个用户将一个1GB的文件上传到存储中。当用户上传文件时,它已经被其他“进程”可见。

从没有上传统计信息的进程中识别100%上传的文件的常见技术是什么?

本地环境中的一种方法是首先调用文件“my-file. iso.tmp”,然后通过删除后缀来重命名它们,因为重命名操作是原子的。但这似乎不是我的Firebase存储问题的合适解决方案。

任何见解都非常感谢!


共1个答案

匿名用户

没有任何方法可以重命名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%,但您可以将文件图标或类似的东西置灰。