gpt4 book ai didi

c# - 从 Blob Azure 下载重定向错误

转载 作者:行者123 更新时间:2023-12-03 05:06:05 25 4
gpt4 key购买 nike

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

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

并定向到

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

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

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

如 Controller 所示?

这是我在 View 中的操作链接

@Html.ActionLink("Download", "Download", "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);

}

最佳答案

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

  1. 从 Controller 返回FileResultFileStreamResult。以下是这样做的示例:How can I present a file for download from an MVC controller? 。请注意,这将首先将文件下载到您的服务器上,然后将内容从那里传输到客户端浏览器。对于较小的文件/低负载,此方法可能有效,但随着您的网站的增长或要下载的文件变得越来越大,它会给您的网络服务器带来更大的压力。
  2. 对具有 Content-Disposition 响应 header 集的 Blob 使用共享访问签名 (SAS)。在此方法中,您只需为要下载的 blob 创建 SAS token ,并使用该 token 创建 SAS URL。您的 Controller 将仅返回带有此 URL 的 RedirectResult。这种方法的优点是所有下载都直接从 Azure 存储进行,而不是通过您的服务器。

创建 SAS 时,请确保

  • 您在 SAS 中至少拥有读取权限。
  • Content-Disposition header 在 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);
<小时/>

附注当我回答这个问题时,问题被编辑了,所以答案可能看起来有点不正常:):)。

关于c# - 从 Blob Azure 下载重定向错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com