【发布时间】:2021-02-01 10:14:32
【问题描述】:
上传时我已将缓存属性设置为“max-age=3600, must-revalidate”。查看浏览器开发工具,网络选项卡,我可以看到标题是正确的,并且缓存属性已设置。 但是每次都会从 Azure blob 存储中获取照片,并得到 200OK 响应。
我上传的方式如下: - 用户上传的照片 -GUID 添加到照片名称并与用户信息一起保存到 Azure SQL 数据库。 -在 C# 中使用 Azure 库创建的 Blob 参考 -上传后设置缓存属性并保存
var uniqueFileName = Guid.NewGuid().ToString() + "_" + fileName;
var newBlob = container.GetBlockBlobReference(uniqueFileName);
using var fileStream = file.OpenReadStream();
newBlob.UploadFromStreamAsync(fileStream).Wait();
newBlob.Properties.CacheControl = "max-age=3600, must-revalidate";
newBlob.SetPropertiesAsync().Wait();
使用 URI + SAS 令牌获取 Blob 我从 SQL 数据库中获取名称,在 azure Blob 中查找它,然后获取 URI 并添加 SAS 以使客户端可以访问 Blob。
var blob = container.GetBlockBlobReference(fileName);
var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1)
});
var blobUrl = blob.Uri.AbsoluteUri + sasToken;
我发现每次创建新的 SAS 时,图像都会被视为新版本。我确实为每个请求创建了一个新的 SAS,以创建客户端用来下载图像的链接。我怎样才能绕过这种行为。我是否应该在不使用 SAS 的情况下让公众可以访问容器以供读取?
【问题讨论】:
标签: c# azure azure-web-app-service blob