【问题标题】:How to cache azure blob storage files如何缓存 azure blob 存储文件
【发布时间】:2018-03-13 08:02:08
【问题描述】:

我有大约 6 个设置文件(xml 或 json)我想存储在 Azure 中,但要在我的 Windows 客户端应用程序中使用。我打算将它们存储在 blob 存储中并使用以下代码下载它们:

var myWebClient = new WebClient();
myWebClient.DownloadFile(Address, file.FullName);

设置文件不会经常更改。如何在本地缓存文件,以免每次都下载?

有没有更好的方法来做到这一点?我应该使用其他一些 Azure 服务吗?

【问题讨论】:

  • 不确定我是否完全理解您的问题,但是...您如何知道 blob 已更改?另外:您的配置文件将存储在公共 blob 中还是私有 blob 中?至于“其他一些 Azure 服务”——不清楚你在寻找什么。

标签: azure caching webclient azure-blob-storage


【解决方案1】:

设置文件不会经常更改。如何在本地缓存文件,以免每次都下载?

根据我的理解,您可以使用 blob 文件的 ETag 属性,该属性可以用作标识符,并且每次对 blob 文件执行更新操作时都会更新它。

在您在 Windows 客户端应用程序中加载设置文件之前,您可以从本地检查 ETag 并与服务器端的相关值进行比较,如果 ETag 不匹配,您可以将设置下载到本地侧进行更新,然后加载较新的设置文件。

由于您使用的是 Windows 客户端应用程序,因此您可以将容器公共访问级别设置为 仅限 Blob 的公共读取访问权限,或者生成对您的容器具有有限权限的 SAS 令牌,然后您可以使用 @ 987654321@ 并按照以下代码从 blob 服务中检索 ETag 属性,如下所示:

//access container with public access level to blobs
//var container = new CloudBlobContainer(new Uri("https://{storage-name}.blob.core.windows.net/{container-name}"));

//access container with SAS token
var container = new CloudBlobContainer(new Uri("https://{storage-name}.blob.core.windows.net/{container-name}?{SAS-token}"));

CloudBlob blockBlob = container.GetBlobReference("setting.json");
blockBlob.FetchAttributes();
string etag=blockBlob.Properties.ETag;

使用WebClient下载设置文件时,可以在本地设置文件的文件名中设置Etag值(如{filename}-{etag}.json)。

此外,您可以利用Azure Storage Explorer 来管理您的存储资源。此外,您还可以利用ContentMD5 属性,但它有一些限制,更多详细信息可以参考here

【讨论】:

    猜你喜欢
    • 2021-08-14
    • 2020-10-08
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2012-05-20
    • 2017-08-18
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多