当前位置: 首页 > 知识库问答 >
问题:

如何避免云Firestore在使用文档ID和传递DownloadURL上传存储文件时的双重写操作

鲍飞星
2023-03-14

我正在开发一个连接到Firebase Cloud Firestore和存储的Flutter应用程序,我想在Cloud Firestore中创建包含存储中文件的下载URL的文档。但是,我还需要文件名是同一个Firestore文档的唯一ID。现在,我在创建文档后上传文件,但之后更新Firestore文档需要额外的写操作。

CollectionReference activities = FirebaseFirestore.instance.collection('activities');
activities.add({
    'postDate': DateTime.now(),
}).then((value) => _startUpload(id: value.id));

其中_startupload是一个将文件上载到存储的函数,并可能返回DownloadURL。我希望能够像这样在添加函数中访问该URL:

CollectionReference activities = FirebaseFirestore.instance.collection('activities');
activities.add({
    'postDate': DateTime.now(),
    'downloadURL': _startUpload(id: SomehowGetThisDocuments.id)
});

共有1个答案

曾鸿振
2023-03-14

您可以执行文档中本节最后一段所述的操作:

newActivityRef = activities.document();
newActivityRef.set({
    'postDate': DateTime.now(),
    'downloadURL': _startUpload(id: newActivityRef.documentID)
});

根据文档,这应该算作一次写入,因为.document().set()等效于.add()

 类似资料:
  • 从spring boot Controller上传文件到谷歌云存储。请提供我一个代码。 到目前为止,我得到了这样一个代码

  • 我在本地开发服务器上运行代码,但使用在项目上配置的GCS默认桶名。 Python 2.7版

  • 我正试图用BlobStore上传到GCS。我在生成上传url时设置了GCS bucket名称,并且文件成功上传。 在上传处理程序中,返回正确的文件名。但是文件实际上以不同的文件名保存在GCS bucket中。每次,文件名都是随机散列,如下所示: 它会是这样工作的吗?这是异常吗? 我根据返回的数据将文件名存储到datastore,这是文件名的正确值。但是我无法使用访问该文件,因为该文件以随机散列作为

  • 我目前面临的问题与谷歌云存储, 我能够下载对象上传到谷歌云存储,但当天晚些时候,我开始得到的错误,因为"这个网站无法到达" 我在c#中以编程方式创建了一个bucket,代码如下: 因此,创建存储桶的设置如下: 默认存储类别:多地区 位置:美国(美国多个地区) 公共访问:每个对象 生命周期:无 访问控制模型:存储桶策略

  • 我想按照官方文档中提供的示例将一个文件上传到Google云存储 然而,我得到了一个错误: 线程“main”com.google.cloud.storage.StorageException中的异常:获取服务帐户的访问令牌时出错:400个错误请求{“错误”:“无效的授予”、“错误描述”:“无效的JWT:令牌必须是短期令牌(60分钟)并且在合理的时间范围内。请检查JWT声明中的iat和exp值。”位于

  • 我正在尝试将一个项目迁移到Android Room。阅读了Android Room文档后,我注意到Singleton适合访问我的数据库。 Android开发者的报价: 注意:如果您的应用程序在单个进程中运行,则在实例化AppDatabase对象时应遵循单例设计模式。每个RoomDatabase实例都相当昂贵,您很少需要在单个进程中访问多个实例。 我编写了以下代码: 只是一个简单的双重检查锁定单例。