【问题标题】:Update LastModified on an Azure Blob在 Azure Blob 上更新 LastModified
【发布时间】:2019-07-10 14:04:24
【问题描述】:

我正在移植代码以在 C# 中使用 Azure 的存储 SDK。

传统上,我称之为更新修改文件的最后写入/修改时间:

File.SetLastWriteTimeUtc(fileName, lastWriteTimeUtc);

要更新 blob 的上次修改时间,我正在尝试执行类似的操作,但由于 LastModified 不可访问,因此无法做到:

CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
blob.Properties.LastModified = lastWriteTimeUtc;
blob.SetProperties();

编译器错误:

无法将属性或索引器“Microsoft.WindowsAzure.Storage.Blob.BlobProperties.LastModified”分配给——它是只读的

如何更新 LastModified 属性?它不会总是更新到当前时间,所以我不能只是重新上传/触摸文件。

【问题讨论】:

    标签: c# azure azure-storage azure-blob-storage


    【解决方案1】:

    Azure 允许您将 METADATA 添加到容器和 Blob。 LastModified 是一个内部属性,没有必要让外部各方更新它——它应该反映它的含义。

    在您的情况下,您似乎希望在迁移内容后保留旧值,并且内容可能不允许在其中添加属性。说,它是一个图像。

    在这种情况下,使用 元数据 添加和读取其他属性。 Article about Metadata on MSDN

    【讨论】:

      【解决方案2】:

      您可以使用SetMetadata 方法更新LastModified 属性。

      【讨论】:

        【解决方案3】:

        您想要的实际上是“触摸”操作。您必须重新上传 BLOB 才能更改 LastModified 属性。

        编辑

        如果您想管理自己的自定义上次修改变量,您可以做的最好的事情是在您的 BLOB 中存储一个自定义“上次修改”字段并自己使用,而不是依赖 Azure 提供的本机 LastModified BLOB。

        【讨论】:

        • 谢谢,但我忘记了一条关键信息(更新了问题):代码并不总是将 LastModified 更新为当前时间,因此除非您可以,否则重新上传似乎不是一种选择上传时设置 LastModified。
        • 最好的办法是在 Blob 中存储一个自定义的“上次修改时间”字段并自己使用,而不是依赖 Azure BLOB 提供的本机 LastModified
        • 如果某个 blob 以某种方式更改,LastModified 属性将由存储服务自动更改。你不必在那里做任何事情。对于触摸操作,我不建议重新上传,因为根据 blob 的大小执行它可能是一项昂贵的操作。我建议操纵 blob 的元数据或其他属性(如缓存控制、内容编码等)。有关详细信息,请参阅此线程:stackoverflow.com/questions/20371429/…
        • @GauravMantri 提出了一个很好的观点。我没想过这样做。
        • 在 blob 中添加属性不是解决方案。内容可能不允许它,在里面跟踪它有点愚蠢。同意 Gaurav - 元数据会有所帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-17
        • 1970-01-01
        • 2020-05-06
        • 2019-07-05
        • 2021-01-01
        • 2016-12-26
        • 1970-01-01
        相关资源
        最近更新 更多