在MVC3中下载Azure Blob文件

时间:2011-07-19 18:12:52

标签: asp.net-mvc asp.net-mvc-3 azure azure-storage azure-storage-blobs

我们的ASP.NET MVC 3应用程序在Azure上运行,并使用Blob作为文件存储。我找到了上传部分。

视图将具有文件名,单击该文件名将提示文件下载屏幕出现。

谁能告诉我怎么做呢?

3 个答案:

答案 0 :(得分:57)

两个选项真的......第一个是直接将用户重定向到blob(如果blob在公共容器中)。这看起来有点像:

return Redirect(container.GetBlobReference(name).Uri.AbsoluteUri);

如果blob位于私有容器中,您可以使用共享访问签名并像上一个示例一样进行重定向,也可以在控制器操作中读取blob并将其下载到客户端作为下载: / p>

Response.AddHeader("Content-Disposition", "attachment; filename=" + name); // force download
container.GetBlobReference(name).DownloadToStream(Response.OutputStream);
return new EmptyResult();

答案 1 :(得分:10)

我注意到从action方法写入响应流会弄乱HTTP标头。一些预期的标题丢失,而其他标题未正确设置。

因此,不是写入响应流,而是将blob内容作为流获取并将其传递给Controller.File()方法。

CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
Stream blobStream = blob.OpenRead();
return File(blobStream, blob.Properties.ContentType, "FileName.txt");

答案 2 :(得分:9)

这是私有blob访问的可恢复版本(对大文件很有用或允许在视频或音频播放中搜索):

sleep 1

示例:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);