1

我正在做的是我有一个动态表并创建所有工作正常的行。在其中一个单元格中,我试图创建一个链接,单击该链接将打开一个文件。但是当我单击链接时,它给了我一个错误,说找不到文件中的服务器。然后我检查文件的方法是在地址栏中输入位置并找到它,但将地址更改为(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)
4

3 回答 3

5

使用 url 而不是物理路径。

改变

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

通过绝对 url 位置

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

如果文件位于您的网站上,则为相对 url 位置

<a href='RELATIVE_PATH/test1.txt' target='_blank'>
于 2012-06-21T12:29:31.507 回答
0
  1. 由于安全原因,大多数操作系统不支持直接文件调用。您必须使用临时位置或从服务器加载文件。

  2. 您的文件应位于虚拟目录中,并具有其他帖子提到的完整 URL。

于 2012-06-21T12:33:42.380 回答
0

您应该考虑使用异步处理程序 (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;
            }
    }
}

希望这可以帮助

于 2012-06-21T12:36:35.500 回答