C# 如何使用<;从asp.net中的共享文件夹下载文件;a href>;?
背景: 有一个asp.NETMVC应用程序,我目前正在不使用MVC重新创建它 在MVC应用程序中,允许用户下载文档的C# 如何使用<;从asp.net中的共享文件夹下载文件;a href>;?,c#,html,asp.net,asp.net-mvc,asp.net-4.5,C#,Html,Asp.net,Asp.net Mvc,Asp.net 4.5,背景: 有一个asp.NETMVC应用程序,我目前正在不使用MVC重新创建它 在MVC应用程序中,允许用户下载文档的元素如下: <a href="/api/file/2187/filter.jpg" target="_blank">download</a> 但是,这在Chrome中不起作用,给我一个错误:不允许加载本地资源 我找不到像MVC应用程序中那样在http上为文件创建链接的方法。如何在应用程序中启用链接,如:http://myapplication/api/fi
元素如下:
<a href="/api/file/2187/filter.jpg" target="_blank">download</a>
但是,这在Chrome中不起作用,给我一个错误:不允许加载本地资源
我找不到像MVC应用程序中那样在http
上为文件创建链接的方法。如何在应用程序中启用链接,如:http://myapplication/api/file/2187/filter.jpg
要在href中使用吗
注意:要下载的文件位于共享文件夹中,无法将其移动到我的本地PC或无法将其导入项目中等
注意2:下载文件后不应刷新页面
任何帮助或建议都应该感谢!谢谢。不应接受URL或查询字符串中的文件路径: 我强烈建议不要在查询字符串或URL中使用filepath。 我在代码中看到,您没有验证文件路径,也没有直接下载文件。这可能非常危险。如果权限设置不正确,或者没有其他机制阻止此类请求,用户可以尝试下载web.config或web服务器上的任何其他文件 我强烈建议使用间接方式下载文件 什么是间接性? 在间接寻址中,您将为文件创建一个标识符。它也可能是一个GUID。 然后您可以通过QueryString或URL接受此GUID。 然后在您的操作中,您将它映射到正确的文件,然后下载它 代码示例: 下面的代码示例使用文件ID 当传递文件id时,它会尝试在
CustomDocumentObj
中获取文件详细信息。
这些详细信息包含实际的文件路径。然后,您可以执行验证以检查这是否是与应用程序相关的文件,以及您的应用程序是否允许下载该文件
public class ServiceController : Controller
{
public ActionResult DownloadFile(string id)
{
CustomDocumentObj document = new CustomDocumentObj(Int32.Parse(id));
// OPTIONAL - validation to check if it is allowed to download this file.
string filetype = Helpers.GetMimeType(document.FilePath);
return File(document.FilePath, filetype, Path.GetFileName(document.FilePath));
}
}
然后在URL中,它可以是如下所示:
<a href="\\myfolder\myapp\file\2187\filter.jpg" target="_blank">download</a>
<a href="/Services/DownloadFile/1">Download File</a>
有关更多详细信息,请参阅此
<a href="/Services/DownloadFile/1">Download File</a>