在asp网页上列出web服务器上的文件

本文关键字:服务器 文件 web asp 网页 | 更新日期: 2023-09-27 18:17:03

我正在寻找一种方法,将文档列为asp网页上web服务器上的链接。

服务器上的文件夹结构为www.website.com''docs''manufacturer''model'',然后与每个型号相关的文档都在相关文件夹中。

我有一个表中的项目列表,可以在view''index.cshtml文件中作为完整列表查看。当我转到view''details.cshtml时,我想列出该项目的相关文档。每个项目都有制造商和型号信息,所以我想我可以用它来构建文件夹的url,但不知道如何对页面进行编码,以显示该文件夹中的所有文档。

希望这有点道理。

更新

我尝试过以下几种:

  @* Get the get model and manufacturer from Asset*@
    @{string modelname = Model.Equipment.ModelName;}
    @{string manufacturername = Model.Equipment.Manufacturer;}
    @* Calcualte path*@
    @{string baseFolder = string.Format("www.somewebiste.co.nz/docs/{0}/{1}/", manufacturername, modelname);}
    @* Enumerate the files *@
    @{IEnumerable<string> files = System.IO.Directory.EnumerateFiles(baseFolder, "*.*", SearchOption.AllDirectories);}

然而,当我运行它时,我会得到以下错误:

mscorlib.dll中发生类型为"System.IO.DirectoryNotFoundException"的异常,但未在用户代码中处理

附加信息:找不到路径"C:''Program Files(x86(''IIS Express''www.somewebiste.co.nz''docs''Mitsubishi Electric''MSZ-GA80VA"的一部分。

我可以看到IIS的本地路径被预先添加到目录字符串中,但是这些文件在一些网站上,而不是本地的。

注意,我还没有尝试对输出进行编码。只是一行一行地工作。

在asp网页上列出web服务器上的文件

您可以这样做:

// Get the model from the user - perhaps via query string?
string model = Request.QueryString["Model"];
// Calcualte your path
string baseFolder = Server.MapPath(string.Format("~/docs/manufacturer/model/{0}", model);
// Enumerate the files; perhaps *.* is too broad? *.pdf better?
IEnumerable<string> files = System.IO.Directory.EnumerateFiles(baseFolder, "*.*", SearchOption.AllDirectories);
foreach (string path in files) 
{
  // write out whatever portion of path you want here
}

然而,实现此功能的诀窍是确保您的IIS帐户具有枚举(读取(主题文件夹/文件的权限。

IIS 6通常使用名为"网络服务"的标准Windows帐户来执行ASP.NET代码。这意味着,如果您想与文件系统交互,网络服务帐户需要对主题文件的读取权限。

IIS 7.5及更高版本虽然更安全,但会变得更棘手。默认情况下,每个应用程序池都在一个虚拟帐户(例如"IIS APPPOOL''ASPNET v4.0"(下执行。与网络服务一样,您需要显式授予此帐户与文件系统交互的权限。但是,主题帐户未列在用户帐户列表下。(这是一个虚拟帐户。(不管怎样,只要在"选择用户或组权限"对话框中键入名称,Windows就会接受虚拟帐户名称。