从azure云存储下载大文件的最佳方式

Pet*_*ack 5 asp.net-mvc download azure

我有一个运行在azure中的MVC Web应用程序,可以提供存储在云存储中的大型文件,如mp3,pdf等.提供这些文件的最佳方式是什么,因此用户可以在点击链接/按钮时下载它们?

简单的方法就是向他们展示:

<a href="...blob.core.windows.net/container/file.mp3">

但是用户必须右键单击才能下载.

要强制下载,您可以返回File ActionResult:

public ActionResult GetPDF( string filename )
{
    return File( filename, "application/pdf", Server.HtmlEncode( filename ) );
}
Run Code Online (Sandbox Code Playgroud)

这个(我认为)的缺点是webrole必须读入文件并将它们输出到流,这将消耗资源,并可能使许多用户陷入困境.而简单的href链接解决方案基本上放弃了工作,因此浏览器直接与云存储对话.

我对么?我应该关注webrole上的额外工作吗?

是否有另一种强制文件下载的方法而不会给webrole带来负担?

更新:

所以我最终做的是使用Content-Type"binary/octet-stream"上传mp3 - 这似乎强制下载提示.不确定这是不是一个好习惯,但它到目前为止是有效的.

kni*_*hor 4

您的假设是正确的,如果您想使用 ActionResult,您需要先将文件下载到 Web 角色,然后将其流式传输到客户端。如果可以的话,您希望避免这种情况,特别是对于大文件,并将其留给 Azure 存储,因为这样 Microsoft 就必须担心处理请求,如果您获得大量流量,则无需为更多 Web 角色付费。

如果您托管的所有文件都是公共的,那么这种方法很有效,但如果您想保护文件的安全,那么就会变得有点棘手(如果您想要这样做,请查看共享访问签名)。

您是否尝试过在 blob 上设置内容类型?根据您将文件上传到 Blob 存储的方式,它们可能不会被设置。如果您通过自己的代码上传 blob,则可以通过CloudBlob.Attributes.Properties.ContentType(来自MSDN)访问它