ASP.Net 目录中的文件列表 + 文件链接

本文关键字:文件 列表 链接 Net ASP | 更新日期: 2023-09-27 17:56:28

>我正在创建一个Web表单,该表单将显示目录中的异常文件列表。文件显示正常,但是,链接不起作用。我已经对解决方案进行了一些快速搜索,唯一的问题是大多数解决方案要求我设置一个虚拟目录,但是这些文件所在的服务器不是Web服务器。以下是列出文件的代码:

var exDir = @"''Server'folder'Exception";
        exLabel.Text = "";
        foreach (string exFile in Directory.GetFiles(exDir))
        {
            exLabel.Text += @"<a href='file:"+exFile+"'> "+exFile+" </a><br/>";
        }

问题出在我的"href"中。有没有办法设置此链接而无需设置虚拟目录?或者,如果我必须设置一个,请通过IIS Express进行设置?

ASP.Net 目录中的文件列表 + 文件链接

如果文件与 Web 服务器不在同一服务器上,则无法在没有虚拟目录的情况下执行此操作。这些文件需要通过 Web 服务器提供给客户端。

虽然您可以使用 IIS Express 创建虚拟目录 - 请查看此讨论线程。您可能还需要启用对IIS Express的外部访问(WebMatrix上的这篇文章在这方面应该会有所帮助)。注意:使用虚拟目录时,您的 URL 需要使用 http: 或 https: 方案而不是 file:

另一种方法是将要共享的文件上传到 Web 服务器上的某个位置,并从 Web 服务器提供它们。

如果引用本地文件系统,则需要按如下方式设置超链接的格式:

file:///c:/myfile.txt

我认为您可以使用下载器服务器端来实现这一点,它可以为您访问文件,然后通过http提供它们。

一个 httphandler,ProcessRequest 方法可以(非常举例)像这样:

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Params["file"] != null)
    {   
            string filename = context.Request.Params["file"].ToString();
        context.Response.Clear();
        context.Response.ClearContent();
        context.Response.ClearHeaders();
        context.Response.Buffer = true;
        FileInfo fileInfo = new FileInfo(filename);
        if (fileInfo.Exists)
        {
            context.Response.ContentType = /* your mime type */;
            context.Response.AppendHeader("content-disposition", string.Format("attachment;filename={0}", fileInfo.Name));
            context.Response.WriteFile(filename);
        }
        context.Response.End();
    }   
}

然后,您将构建链接,以将文件作为参数指向处理程序:

var exDir = @"''Server'folder'Exception";
DirectoryInfo dir = new DirectoryInfo(exDir);
foreach (FileInfo exFile in dir.GetFiles())
{
    exLabel.Text += @"<a href='downloader.ashx?file="+ exFile.Name + "'> "+exFile.FullName+" </a><br/>";
}

请记住在 web.config 中设置处理程序:

<system.web>
    <httpHandlers>
        ...
        <add verb="*" path="downloader.ashx" type="YourNamespace.downloader"/>
    </httpHandlers>
</system.web>

(当然这个样本很简单,我觉得错误很多,只是为了澄清一下方向)