有没有办法使用 flutter 重命名 firebase 存储中的文件?

Is there a way to rename file in firebase storage using flutter?

我正在根据时间戳上传文件。现在当用户更新信息时。我必须根据当前时间戳更新文件名。那么,是否可以更新文件名?

注意:我们可以删除旧信息并创建新信息。

但是,我想知道是否有任何编辑选项。

简短的回答是,在将文件上传到 Firebase 存储后没有编辑文件名的选项 API(即使没有使用 Flutter)。

但理论上有一些解决方法:

  • 一个 similar question 的 iOS 实现收到了一个答案,你可以先下载图像,然后从存储中删除它,然后用新的时间戳重新上传它,正如您在问题中指出的那样。

  • 但我将如何实施这种情况是,您始终将 Firebase 的存储模块与 Firestore 结合使用。因此,您 link Firestore 中的图像,只需更新那里对象中的时间戳。举个例子:

{
   "image_path": "/images/1595765336.jpg" //The filename contains the original timestamp, when it was uploaded.
   "timestamp:" 1595765336 //Now you can update just this value and the reference to the image remains the same.
   // And of course you can add additional parameters as you want.
}

第二个选项可能是更好的解决方案,当您不想从用户那里消耗太多数据时,因为您只是更新时间戳而不是整个图像,即使它保持不变。

在另一个回答中提到,文件名不能直接更改。

一个选项是下载文件,将其删除,然后上传一个新名称的新文件。

另一种选择是利用云功能来执行该任务

前两个选项占用大量带宽,如果文件很大或更改频繁,可能会增加成本。

文件名之类的东西可以是动态的,打破文件名和文件本身之间的 link 通常是一个好习惯。

写文件时,我会创建一个通用文件名,然后将面向用户的名称存储在 Firestore 中。所以这就是 Firestore 的样子,图像集合中的每个文档都有一个 documentId,它与存储在存储中的图像名称和 url 引用

相匹配
firestore
   images (collection)
      image_0 (auto-generated id created with Swift .addDocument or Java .add for example)
         name: "Picture of a Leroy"
         url: "www....."
         timestamp: "20200722"
      image_1
         name: "Picture of Sally"
         url: "www....."
         timestamp: "20200725"

如您所见,使用这种结构,您可以轻松更改文档名称,开销或成本极低,而且速度非常快。