【问题标题】:Downloading from Blob Azure redirects wrong从 Blob Azure 下载重定向错误
【发布时间】:2017-08-20 06:05:01
【问题描述】:

当我按下下载并调用这个动作时,我得到了结果

您要查找的资源已被删除,有它的名字 已更改,或暂时不可用。

并定向到

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

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

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

如控制器所示?

这是我在视图中的操作链接

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

public ActionResult Download(string id)
        {

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

            return View(path + id);

        }

【问题讨论】:

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


    【解决方案1】:

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

    1. Return aFileResultorFileStreamResultfrom your controller。这是一个这样做的例子:How can I present a file for download from an MVC controller?。请注意,这将首先在您的服务器上下载文件,然后从那里将内容流式传输到客户端浏览器。对于较小的文件/低负载,这种方法可能有效,但随着您的网站增长或要下载的文件变得更大,它会给您的网络服务器带来更大的压力。
    2. Use a Shared Access Signature (SAS) for the blob with Content-Disposition response header set。在这种方法中,您只需为要下载的 blob 创建一个 SAS 令牌,并使用它创建一个 SAS URL。您的控制器将简单地返回带有此 URL 的 RedirectResult。这种方法的优点是所有下载都直接从 Azure 存储进行,而不是通过您的服务器。

    在创建 SAS 时,请确保

    • 您在 SAS 中至少拥有 Read 权限。
    • Content-Disposition 标头在 SAS 中被覆盖。
    • SAS 的到期时间应该足以下载文件。

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

            var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Read,
                SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),
    
            }, new SharedAccessBlobHeaders()
            {
                ContentDisposition = "attachment;filename=" + blob.Name
            });
            var blobUrl = string.Format("{0}{1}", blob.Uri.AbsoluteUri, sasToken);
            return Redirect(blobUrl);
    

    附:在我回答问题时,问题已被编辑,因此答案可能看起来有点不合时宜:) :)。

    【讨论】:

      【解决方案2】:

      鉴于您将图片网址作为 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"));

      【讨论】:

      • 你在说什么,图片网址?
      • 当您将文件(例如图像)保存到 blob 存储时,您会获得保存文件的 url,您可以使用它来访问您的图像..
      • 网址保存在哪里?
      • 更详细的有用文章:docs.microsoft.com/en-us/azure/storage/…
      • 您提供的链接几乎就是我所拥有的,并且比我已经知道的不再解释
      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2021-10-29
      • 2017-08-20
      • 2014-09-20
      • 2019-04-06
      相关资源
      最近更新 更多