在Azure存储Blob中添加Cache-Control和Expires头文件。

10 浏览
0 Comments

在Azure存储Blob中添加Cache-Control和Expires头文件。

我正在使用Azure存储来提供静态文件blob,但我希望在提供文件/ blob时添加Cache-Control和Expires头,以减少带宽成本。

CloudXplorer和Cerebrata的Cloud Storage Studio这样的应用程序提供了在容器和blob上设置元数据属性的选项,但是当尝试添加Cache-Control时会出现问题。

有人知道是否可以为文件设置这些头部吗?

0
0 Comments

问题的原因是Azure Storage Blobs在默认情况下不会添加Cache-Control和Expires headers,导致无法在HTTP响应中设置缓存控制。

解决方法是使用Cerebrata Cloud Storage Studio或Azure Explorer来设置每个blob对象的Cache-Control属性。通过右键点击blob对象,选择"View/Edit Blob Properties",然后设置Cache-Control属性的值。例如:public, max-age=2592000

通过curl命令可以检查blob对象的HTTP头,可以看到设置的缓存控制值。

Azure Explorer也提供了相同的功能,并且是免费的,不需要试用。可以在cerebrata.com/products/azure-explorer/introduction中找到更多信息。

0
0 Comments

问题的原因是需要向Azure Storage Blobs添加Cache-Control和Expires headers,以设置缓存头或其他头字段。解决方法是创建一个临时网站,并使用代码运行WebJobs,通过运行可执行文件来设置缓存头。

具体步骤如下:

1. 在与存储账户位于同一数据中心的地方创建一个临时网站。

2. 使用提供的代码创建一个控制台程序,并编译为发布版。将可执行文件和所有所需的DLL文件压缩为.zip文件,或直接从VisualStudio发布。

3. 创建一个WebJob,并上传第2步中的.zip文件。

4. 运行WebJob,并查看控制台中的输出信息。

5. 删除临时网站或将其更改为免费版。

代码中的示例代码使用Azure.Storage.Blobs.V12和Net 5。它使用Azure.Storage.Blobs库来连接到Azure Storage,并通过循环遍历每个容器来更新Blob的缓存头。

代码中的关键部分是UpdateHeaders和UpdateOneBlob方法。UpdateHeaders方法用于循环遍历每个容器,并在每个容器中调用UpdateOneBlob方法来更新Blob的缓存头。UpdateOneBlob方法使用BlobClient获取Blob的属性,然后使用BlobHttpHeaders类来设置新的缓存控制值,并将其应用于Blob。

通过运行WebJob,可以在控制台中查看输出,并在WebJob控制页面上查看生成的日志文件。

这是一个简单的解决方法,可以在Azure Storage Blobs中添加Cache-Control和Expires headers来设置缓存头。这可以提高性能和响应时间,并减少网络传输。

0
0 Comments

问题的出现原因:

- 作者需要在大约600k个blob上运行批处理作业。

- 作者发现两个因素对提高效率非常有帮助:

- 在相同数据中心的工作角色中运行操作。只要它们在同一个亲和组中,Azure服务之间的速度很快,而且没有数据传输费用。

- 并行运行操作。.NET v4中的任务并行库(TPL)使此操作非常简单。

解决方法:

- 使用以下代码为容器中的每个blob设置缓存控制头:

// 获取容器中每个blob的信息
var blobInfos = cloudBlobContainer.ListBlobs(
    new BlobRequestOptions() { UseFlatBlobListing = true });
Parallel.ForEach(blobInfos, (blobInfo) =>
{
    // 获取blob属性
    CloudBlob blob = container.GetBlobReference(blobInfo.Uri.ToString());
    blob.FetchAttributes();
    // 如果需要,设置缓存控制头
    if (blob.Properties.CacheControl != YOUR_CACHE_CONTROL_HEADER)
    {
        blob.Properties.CacheControl = YOUR_CACHE_CONTROL_HEADER;
        blob.SetProperties();
    }
});

其他信息:

- 不能再将完整的URI传递给GetBlobReference。作者用一些最新的代码编辑了答案,以便在其中一个容器中执行此操作。

- 有人可能编写了一个实用程序来执行此操作,考虑到人们经常需要这样做。

- 作者在相同容器中对大约200,000个blob运行了脚本,并收到了409服务器响应。作者想知道这是什么意思。

- 某些情况下Azure SDK for Java的用法与此非常相似。

0