如何使用锚标记打开文件

时间:2012-06-21 12:27:46

标签: asp.net

我正在做的是我有一个动态表并创建所有正常工作的行。在其中一个单元格中,我试图创建一个链接,单击该链接将打开一个文件。但是,当我点击链接时,它给我一个错误,说无法在文件中找到服务器。然后我要检查文件是我在地址栏中键入位置并找到它但将地址更改为(file:/// c:/inetpub/wwwroot/test1.txt)。所以我所做的是将该地址放入锚标签,但它仍然无法正常工作。这是我到目前为止所拥有的。任何帮助都将非常感激。

tblrow = New TableHeaderRow
tblcell = New TableHeaderCell
tblcell.Text = "<a href='C://inetpub/wwwroot/test1.txt' target='_blank'>" & Test &   "</a>"
 tblrow.Cells.Add(tblcell)
 tableName.Rows.Add(tblrow)

3 个答案:

答案 0 :(得分:4)

使用网址而不是物理路径。

更改

<a href='C://inetpub/wwwroot/test1.txt' target='_blank'>

绝对网址

<a href='http://DOMAIN/test1.txt' target='_blank'>

或文件位于您网站上的相对网址

<a href='RELATIVE_PATH/test1.txt' target='_blank'>

答案 1 :(得分:0)

  1. 由于安全原因,大多数操作系统不支持直接文件调用。您必须使用临时位置或从服务器加载文件。

  2. 您的文件应位于虚拟目录中,并提供完整的网址作为其他帖子提及。

答案 2 :(得分:0)

您应该考虑使用Async Handler(ASP.NET)来下载该文件。最终,锚点在浏览器中启动另一个请求,该请求将文件下载到用户。

这是一篇文章,其中包含MSDN的一些信息。

以下是您将在处理程序中编写的代码示例:

public void ProcessRequest(HttpContext context) {
    // read input etx
    context.Response.Buffer = false;
    context.Response.ContentType = "text/plain";
    string path = @"c:\somefile.txt";
    FileInfo file = new FileInfo(path);
    int len = (int)file.Length, bytes;
    context.Response.AppendHeader("content-length", len.ToString());
    byte[] buffer = new byte[1024];
    Stream outStream = context.Response.OutputStream;
    using(Stream stream = File.OpenRead(path)) {
        while (len > 0 && (bytes =
            stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                outStream.Write(buffer, 0, bytes);
                len -= bytes;
            }
    }
}

希望这有帮助