1

我在硬盘驱动器上的文件夹中有一些文件,例如 C:\ExtraContent\ 有一些 PDF 文件。此文件夹不是网站的一部分。我能够使用默认的 ASP.NET FileUploader 成功地将 PDF 上传到此文件夹,没问题。

我想做的是,在该文件夹 C:\ExtraContent\somePDF.pdf 中创建一个链接到 PDF 的超链接

我可以使用带有以下代码的 Button 来关闭:

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 超链接一起使用。

我想使用超链接的原因是用户可以选择右键单击并另存为,以下载副本。如果 HyperLink 控件只能链接到相对路径,我该怎么做才能获得想要的结果?

注意:制作我试图访问网站的一部分的文件对我们来说是不切实际的。

4

2 回答 2

2

基本上允许以您描述的方式访问文件夹是一个真正的安全风险(因为它需要破解权限),这不是微不足道的,通常应该避免。你实现你想要的行为的方式就是这些。

首先创建一个空白aspxashx页面。

其次,无论是在Page_LoadProcessRequest您想使用以下几行代码

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:一个 ashx 或 aspx 页面

于 2012-04-26T05:18:15.343 回答
0

您需要创建一个指向充当“代理”的页面的超链接,以便该页面将返回包含文件流的响应。

您不能创建指向不属于您站点的 prt 的文件的链接。

于 2012-04-26T05:06:05.027 回答