我们正在构建一个与DAM(数字资产管理)系统集成的ASP.NET Web应用程序。 DAM将文件存储在Azure blob存储中,并使用Azure CDN公开提供。
我们将从我们的网络应用程序下载这些文件(大多数是PDF)。当用户请求其中一个文件时,我们将提供一个自定义URL,该URL将在返回相关文件进行下载之前在服务器上运行一些代码(记录下载等)。
客户端要求始终将文件作为浏览器附件(即内容处置附件标题)返回。我很好奇我在这里有什么选择。
我的理想是抽象CDN URL并且我的自定义URL是文件的公共URL。这将允许我设置相关的响应标题等。但是,我认为这里唯一的解决方案是从CDN下载文件并将其缓存在我的Web服务器上,这将模糊CDN的目的。因此,一旦我完成了服务器处理,我必须将客户端重定向到CDN公共URL。但是有没有办法可以确保Azure使用正确的响应标头返回文件,以确保委派浏览器的默认下载行为?
*更新*
在看到这个问题的答案时,我意识到我可能会提出错误的问题。谢谢那些在这里回答的人。 Follow-up question is here
答案 0 :(得分:3)
您需要在Blob存储上配置默认版本,以便它向未经过身份验证的客户端显示所需的标头。 this question中的问题具有使其有效的代码。
一旦设置完成,并且为匿名客户端工作,CDN将复制所有标头,它应该按预期工作。
存在功能,您可以在blob property上设置ContentDisposition但是,虽然这将在blob上设置属性,但它不会传递到标头。
我使用以下方法使用Powershell对此进行了测试(仅因为它比c#更快)
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$container = Get-AzureStorageContainer -Name $ContainerName -Context $context
$blobref = ($script:container.CloudBlobContainer.GetBlobReferenceFromServer("images/pier.jpg"))
$blobref.Properties
$blobref.Properties.ContentDisposition = 'attachment; filename="fname.ext"'
$blobref.SetProperties()
$blobref = ($script:container.CloudBlobContainer.GetBlobReferenceFromServer("images/pier.jpg"))
$blobref.Properties
产生(其中包括)
ContentDisposition:附件;文件名=" fname.ext"
但是在查询标题时没有设置任何内容
([system.Net.HttpWebRequest]::Create($blobref.Uri.AbsoluteUri)).getresponse()
(回答评论,这些是返回的标题 - 在试验时我也尝试过使用和不使用内容类型 - 因此它在这里是空白的)
IsMutuallyAuthenticated : False
Cookies : {}
Headers : {x-ms-request-id, x-ms-version, x-ms-lease-status, x-ms-blob-type...}
SupportsHeaders : True
ContentLength : 142224
ContentEncoding :
ContentType :
CharacterSet :
Server : Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
LastModified : 01/03/2016 11:29:04
StatusCode : OK
StatusDescription : OK
ProtocolVersion : 1.1
ResponseUri : https://xxxx.blob.core.windows.net/cdn/images/pier.jpg
Method : GET
IsFromCache : False
由于CDN只会复制HTTP标头本身的信息,因此这些数据不会进入CDN。
由于自身最为人所知的原因,Powershell并没有发送x-ms版本,所以我回到了确实产生标题的telnet -
HEAD /cdn/images/pier.jpg HTTP/1.1
HOST: xxxx.blob.core.windows.net
x-ms-version: 2015-04-05
HTTP/1.1 200 OK
Content-Length: 142224
Last-Modified: Tue, 01 Mar 2016 11:29:04 GMT
Accept-Ranges: bytes
ETag: "0x8D341C4B1C4F34F"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: b4f41b01-0001-00d7-7cc9-7384c9000000
x-ms-version: 2015-04-05
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
Content-Disposition: attachment; filename="fname.ext"
Date: Tue, 01 Mar 2016 14:49:17 GMT