从Blob Azure下载重定向错误

时间:2017-03-27 13:36:09

标签: c# asp.net azure model-view-controller azure-storage

当我按下载并调用此操作时,我会得到结果

  

您要查找的资源已被删除,名称已有   已更改,或暂时无法使用。

并转向

  

http://integratedproject20170322032906.azurewebsites.net/MyDocumentUps/Download/2020Resume.pdf

为什么它链接到上面而不是

  

https://filestorageideagen.blob.core.windows.net/documentuploader/2020Resume.pdf

如控制器所示?

这是我在视图中的actionlink

  

@ Html.ActionLink("下载","下载"," MyDocumentUps",new {id =   item.DocumentId.ToString()+ item.RevisionId.ToString()+   item.Attachment},new {target =" _blank"})|

public ActionResult Download(string id)
        {

            string path = @"https://filestorageideagen.blob.core.windows.net/documentuploader/";

            return View(path + id);

        }

2 个答案:

答案 0 :(得分:2)

我可以想出两种方法可以强制在客户端浏览器中下载文件。

  1. Return a {FileResult {1}} {FileStreamResult {1}} 即可。这是一个这样做的例子:How can I present a file for download from an MVC controller?。请注意,这将首先在您的服务器上下载文件,然后从那里将内容流式传输到客户端浏览器。对于较小的文件/低负载,这种方法可能有效,但随着您的网站增长或要下载的文件变得更大,它将对您的Web服务器造成更大的压力。
  2. or 即可。在这种方法中,您只需为要下载的blob创建SAS令牌,然后使用该令牌创建SAS URL。您的控制器只会使用此网址返回from your controller。这种方法的优点是所有下载都直接从Azure存储发生,而不是通过您的服务器发生。
  3. 创建SAS时,请确保

    • 您在SAS中至少拥有Use a Shared Access Signature (SAS) for the blob with Content-Disposition response header set个权限。
    • 在SAS中覆盖Content-Disposition标头。
    • SAS的到期应足以让文件下载。

    以下是创建共享访问签名的示例代码。

    RedirectResult

    P.S。当我回答这个问题的时候,这个问题已经被编辑了,所以答案可能看起来有些糟糕:) :)。

答案 1 :(得分:1)

鉴于您将图片网址作为Model的一部分,并且blob没有任何限制:

<img src=@Model.YourImageUri>

var image = new BitmapImage(new Uri("https://your_storage_account_name.blob.core.windows.net/your_container/your_image.jpg"));