gpt4 book ai didi

asp.net - 如何在 MVC 中提供文件而不暴露 URL?

转载 作者:行者123 更新时间:2023-12-04 14:42:16 26 4
gpt4 key购买 nike

我有一个树查看器,允许用户浏览文件和子目录,当用户到达文件时,网站将转到https://website.com/path/subpath/file .pdf。假设我可以识别出用户正在查看文件,则会发生以下情况:

  • Controller 将生成 SAS key 以从 Azure 检索文件。
  • Controller 将获取一个网址:https://myaccount.files.core.windows.net/path/?=accesskey

虽然用户查看此访问 key 没有问题,但它最终会过期,并且对于用户为页面添加书签的情况,我希望用户被重定向到 Azure 路径,但对于 ASP.NET 来说,输出文件就好像用户仍在 https://website.com/path/subpath/file.pdf

所以最终的问题基本上是:

How can I output a file, without forcing download and without showing the file path/url?

最佳答案

您可以尝试以字节数组的形式从存储中读取文件,并使用 File 方法从操作方法中返回它。

public ActionResult View(int id)
{
// id is a unique id for the file. Use that to get the file from your storage.
byte[] byteArrayOfFile=GetFileInByteArrayFormatFromId(id);
return File(byteArrayOfFile,"application/pdf");
}

假设 GetFileInByteArrayFormatFromId 从存储/azure 读取后返回文件的字节数组版本。您可以考虑在您的环境中缓存一些文件,这样您就不需要在每次请求时都联系 azure 来获取它。

如果您可以将文件作为文件流读取,则 File 方法也有一个重载,也可以采用该方法

public ActionResult View(int id)
{
// id is a unique id for the file. Use that to get the file from your storage.
FileStream fileStream = GetFileStreamFromId(id);;
return File(fileStream, "application/pdf","Myfile.pdf");
}

如果您的服务器中有可用的文件(缓存文件),您可以使用 File 方法的另一个重载,您将在其中传递路径而不是字节数组。

public ActionResult View(int id)
{
var f = Server.MapPath("~/Content/Downloads/sampleFile.pdf");
return File(f,"application/pdf");
}

如果浏览器支持显示响应的内容类型,则响应将显示在浏览器中。大多数主流浏览器都支持渲染 pdf 文件。

File 方法还有另一个重载,它采用浏览器的保存/下载对话框将使用的下载文件名,以便用户可以将其保存到本地计算机和/或打开。

public ActionResult View(int id)
{
var pathToTheFile=Server.MapPath("~/Content/Downloads/sampleFile.pdf");
return File(pathToTheFile, MimeMapping.GetMimeMapping(pathToTheFile),"Myfile.pdf");
}
public ActionResult ViewFromByteArray(int id)
{
byte[] byteArrayOfFile=GetFileInByteArrayFormatFromId(id);
return File(byteArrayOfFile, "application/pdf","Myfile.pdf");
}

这样,用户将从浏览器中收到下载提示。

关于asp.net - 如何在 MVC 中提供文件而不暴露 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456357/

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