【问题标题】:Is there a way to rename file in firebase storage using flutter? [duplicate]有没有办法使用颤振重命名firebase存储中的文件? [复制]
【发布时间】:2020-11-15 20:08:04
【问题描述】:

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

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

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

【问题讨论】:

  • Firebase SDK 不提供移动或重命名操作。您必须编写代码来下载文件,使用新名称再次上传,然后删除原始文件。最好不要依赖存储中的文件名。相反,它更容易管理有关数据库中文件的数据。

标签: firebase flutter google-cloud-storage firebase-storage file-rename


【解决方案1】:

正如另一个答案中提到的,文件名不能直接更改。

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

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

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

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

在编写文件时,我会创建一个通用文件名,然后将面向用户的名称存储在 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"

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

【讨论】:

    【解决方案2】:

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

    但理论上有一些变通方法:

    • iOS 实现的similar question 收到了答复,您可以先下载图像,然后将其从存储中删除,然后使用新时间戳重新上传,如您在问题中所述。

    • 但我将如何实现这种情况,即您始终将 Firebase 的 Storage 模块与 Firestore 结合使用。因此,您在 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.
    }
    

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

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2023-02-25
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2019-06-07
      • 2020-10-01
      相关资源
      最近更新 更多