创建指向本地 PC 上的物理路径的超链接,指向不属于网站的文件
本文关键字:超链接 网站 文件 路径 不属于 PC 创建 | 更新日期: 2023-09-27 18:32:13
我在硬盘驱动器上的文件夹中有一些文件,例如C:''ExtraContent'',其中包含一些PDF文件。 此文件夹不是网站的一部分。 我能够使用默认 ASP.NET 文件上传器成功将PDF上传到此文件夹,没问题。
我想做的是,创建一个超链接,链接到该文件夹C:''ExtraContent''somePDF中的PDF.pdf
我能够使用带有以下代码的按钮接近:
protected void Button1_Click(object sender, EventArgs e)
{
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData("C:'ExtraContent'somePDF.pdf");
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", buffer.Length.ToString());
Response.BinaryWrite(buffer);
}
以上在打开文件方面有效。 但是我无法让它与 ASP.NET 超链接一起使用。
我想使用超链接的原因是,用户可以选择右键单击并另存为,以下载副本。 如果超链接控件只能链接到相对路径,我该怎么做才能获得所需的结果?
注意:使我尝试访问的文件成为网站的一部分对我们来说是不切实际的。
基本上,允许以您描述的方式访问文件夹是一种真正的安全风险(因为它需要黑客攻击权限),这并非微不足道,通常应该避免。你实现你想要的行为的方式是这样的。
首先创建一个空白aspx
或ashx
页面。
其次,无论是在Page_Load
还是ProcessRequest
中,您都希望使用以下行的代码
string filePath = "c:''Documents''Stuff''";
string fileName = "myPath.pdf";
byte[] bytes = System.IO.File.ReadAllBytes(filePath + fileName);
context.Response.Clear();
context.Response.ContentType = "application/pdf";
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Expires = -1;
context.Response.Buffer = true;
context.Response.AddHeader("Content-Disposition", string.Format("{0};FileName='"{1}'"", "attachment", fileName));
context.Response.BinaryWrite(bytes);
context.Response.End();
我还没有对此进行测试并从我的脑海中获取它,因此可能需要一些时间,但上面的代码应该可以让您走上正确的轨道,导致人员浏览器开始下载您提供的文件。
编辑:我刚刚意识到(重新阅读您的问题后)您的问题与我的想法略有不同,要解决您的问题,只需将您正在使用的超链接按钮链接到可以处理上述请求的页面。IE:灰页或 aspx 页
您需要创建指向充当"代理"的页面的超链接,以便该页面将返回包含文件流的响应。
您无法创建指向不属于您站点的文件的链接。