创建另一个项目中文件的相对路径

问题描述 投票:0回答:1
我正在使用此功能生成文件的绝对路径

HttpContext.Current.Server.MapPath("/File.jpg");
但是它返回解决方案启动项目中的目录路径。  不是此代码所在的项目以及我想要该文件所在的位置。  当我尝试像这样后退两步并进入另一个项目时..

HttpContext.Current.Server.MapPath("../../ProjectTwo/File.jpg");
我得到的根目录是C:\inetpub\wwwroot\ProjectTwo。

我认为这是因为我在 IIS 上运行它,但是有没有办法在解决方案中创建另一个项目的绝对路径?

c# asp.net path relative-path server.mappath
1个回答
0
投票
好吧,无论是发布的网站还是您的代码,那么您对通过有效 URL 检索的文件的寻址意味着您必须使用 server.Mappath。

因此,存在两种解决方案:

假设您在其他“大”服务器上有文件,例如无数的 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 服务器网络上其他服务器/计算机上的文件夹) .

© www.soinside.com 2019 - 2024. All rights reserved.