HttpContext.Current.Server.MapPath("/File.jpg");
但是它返回解决方案启动项目中的目录路径。 不是此代码所在的项目以及我想要该文件所在的位置。 当我尝试像这样后退两步并进入另一个项目时..
HttpContext.Current.Server.MapPath("../../ProjectTwo/File.jpg");
我得到的根目录是C:\inetpub\wwwroot\ProjectTwo。我认为这是因为我在 IIS 上运行它,但是有没有办法在解决方案中创建另一个项目的绝对路径?
因此,存在两种解决方案:
假设您在其他“大”服务器上有文件,例如无数的 PDF 或图像文件。
因此,作为开发人员,您必须选择是否将其他文件路径暴露给 Web 端,或者只允许后台代码检索这些文件。出于安全原因,因此在大多数情况下,我不允许从 Web 服务器到文件的有效路径名。因此,我不使用(或者更好的说法是不允许)这样的 URL 是有效的。如果其他路径名称只是您不太关心的 PDF 或图片(即:任何用户都可以查看和查看文件),那么您可以将所谓的“虚拟文件夹”添加到网站。这只是让您将路径名映射到现有网站的根目录,它可以是任何有效的 Windows 路径名。因此,您可以添加一个名为:
的虚拟文件夹
\\server01\documents\PDF\
您可以为虚拟命名任何您想要的名称,例如 PDFS因此,您可以使用这种格式:
www.mywebsite.com/PDF/part22.pdf
因此上述内容将解决
\\server01\documents\PDF\part22.pdf
并且 server.Mappath("~/PDF/part22.pdf") 也会返回正确的 Windows 有效文件路径。但是,正如我所指出的,此类文件通常属于一个客户,出于安全原因,我不喜欢将公司内部文件夹映射到 Web 服务器上的有效外部 URL。
因此,我倾向于将外部路径名“存储/保存”在我的自定义配置文件(通常是数据库行)中。
然后,为了检索此类文件,我使用隐藏代码,并将文件“流式传输”或“发送”到客户端浏览器以进行下载或其他操作。这从而增强了安全性。
请记住,只有 Web 服务器和有效的 URL(包括映射的虚拟文件夹)才会尊重您对此类文件夹的安全设置。但是,100% 的代码隐藏会忽略登录用户,并且代码隐藏可以自由地读取/加载/复制可从您的 Web 服务器访问的任何有效文件。因此,您可以选择是否要映射并允许外部 Web 服务器 URL 映射到某个内部文件夹。如果没有,为了更好的安全性,那么您只允许后台代码使用此类文件,并且绝不允许 IIS 和有效 URL 映射到此类内部文件夹。
因此,请根据以上内容做出决定:
您是否希望用户和 Server.MapPath 从有效的 URL 映射到内部文件,或者您是否只希望后面的代码使用此类文件?
所有隐藏的代码从不使用 URL 来读取/使用文件,并且此类代码始终使用常规的有效 Windows 路径名来运行此类代码。如前所述,此规则不适用于网站的现有文件夹,或者如果您向网站添加了一些映射到其他文件夹的“虚拟”文件夹(包括 Web 服务器网络上其他服务器/计算机上的文件夹) .