我们的ASP.NET MVC 3应用程序在Azure上运行,并使用Blob作为文件存储。我找到了上传部分。
视图将具有文件名,单击该文件名将提示文件下载屏幕出现。
谁能告诉我怎么做呢?
答案 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);