使用Azure Blob存储从WCF REST下载文件

时间:2012-01-06 20:56:22

标签: wcf rest azure blob azure-storage

我有Azure Blob存储的WCF REST服务。我不想将我的服务用作流的代理,因此我想将客户端的请求重定向到绝对blob网址,但它会重定向到该文件并尝试直接打开它。当服务器将请求重定向到绝对blob url时,我想要的就是开始下载过程。我尝试过的代码如下:

    var sas = blob.GetSharedAccessSignature(new SharedAccessPolicy
    {
        Permissions = SharedAccessPermissions.Read,
        SharedAccessStartTime = DateTime.UtcNow,
        SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(1)
    });
    WebOperationContext.Current.OutgoingResponse.ContentType = blob.Properties.ContentType;
    WebOperationContext.Current.OutgoingResponse.ContentLength = blob.Properties.Length;
    WebOperationContext.Current.OutgoingResponse.Location = blob.Uri.AbsoluteUri+sas;
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Redirect;

P.S。我试图将状态代码更改为Redirect,Moved ..等等,但没有任何变化。

更新 如果我将ContentType更改为application / octet-stream,则会在IE中生成如下结果:

<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
...
</base64Binary>

1 个答案:

答案 0 :(得分:1)

this question可能重复。

由于Stive Marx认为无法控制Azure Lbob的“内容处理”标题,因此强制浏览器(IE)无法下载该文件。将内容类型设置为“application / octet-stream”可能会强制某些浏览器下载该文件,而不是打开它,但显然它不适用于IE。