我有一个运行在azure中的MVC网络应用程序,可以提供存储在云存储中的大文件,如mp3,pdf等等。什么是提供这些文件的最佳方式,因此用户在点击链接/按钮时可以下载它们?从Azure云存储下载大文件的最佳方式
简单的方法是只是告诉他们:
<a href="...blob.core.windows.net/container/file.mp3">
但随后用户必须右键点击下载。
强制进行下载,您可以返回一个文件的ActionResult:
public ActionResult GetPDF(string filename)
{
return File(filename, "application/pdf", Server.HtmlEncode(filename));
}
这样做的缺点(我认为)是,webrole在文件并将其输出流中读取数据,这将消耗资源,并可能让许多用户陷入困境。而简单的href链接解决方案基本上将工作交给工作人员,让浏览器直接与云存储进行对话。
我正确吗?我应该关心卷轴上的额外工作吗?
是否有另一种方式来强制文件下载而不会增加网络负担?
UPDATE:
所以我落得这样做上传MP3与内容类型“二进制/八位字节流” - 这似乎强制下载提示。不知道这是否是一种好的做法,但它迄今为止工作。
谢谢。是的,内容类型设置正确(音频/ mpeg),并且当您单击它在浏览器中播放的链接时。我希望有一种方法可以在不通过网页的情况下启动下载。似乎应该可以用javascript来实现?你只是想告诉浏览器下载而不是播放它。 – PeteShack 2011-05-13 14:46:25
我发现缺少一部分难题,从blob存储下载时,它没有将Content-disposition头设置为附件,因此浏览器不知道您想将其视为下载而不是只需要做一些事情(我想你可以在Azure的预发布版本中进行设置)。对Blob和Content-disposition的简单搜索将为您提供大量有关如何在MVC之外完成这些任务的示例。我怀疑这是所有的文件操作结果。 – knightpfhor 2011-05-18 04:45:23