Web站点目录之外的引用文件

时间:2010-07-15 18:08:27

标签: c# asp.net

如何在网站的根目录之外引用文件?

例如,我的网站位于C:\ dev \ TestSite 我正在使用ASP.NET与XSP。 webapp将使用mod_mono部署在Apache上。 我在C:\ images中有图像,我想这样做:

<img src="C:\images\logo.gif"/>

4 个答案:

答案 0 :(得分:5)

您的img代码的src值将发送给客户端。您需要指定相对于文档根目录的路径。最好的办法是设置一个虚拟文件夹(在IIS中,别名是等效的apache)指向c:\images路径,然后更改提到的标记src路径,如下所示

<img src="/images/logo.gif" />

要在apache中执行此操作,您需要在httpd.conf中使用别名。这条线看起来像这样

Alias /images c:/images

以下是文档http://httpd.apache.org/docs/2.0/mod/mod_alias.html#alias

答案 1 :(得分:2)

虽然可能可能通过一些hacky方法来做到这一点,但这不是一个好主意。允许IIS帐户访问更大文件系统上的文件/文件夹将是一个很大的潜在安全漏洞。

实现此目的的最佳方法是使用IIS虚拟目录。将您的内容放在专用于支持网站的文件夹中,不要让整个C:驱动器成为虚拟目录。

答案 2 :(得分:2)

您无法在页面的HTML代码中执行此操作。 HTML页面只能引用Web可访问的内容(关于图像,CSS,javascript等)。您可以创建一个指向图像文件夹的虚拟目录,以便它可以通过Web访问。

修改

conf文件中的apache方式。

Alias /images "C:/Images"

来自某个家伙的little walkthrough

答案 3 :(得分:2)

我将假设C:\ images \ logo.gif是服务器上的路径,而不是客户端上的路径。

src属性由html客户端(即Internet Explorer)解释。客户端无法在您的Web目录之外看到任何内容。实际上,如果您已经提供了允许他们这样做的权限,那么客户端只能看到您网页目录中的内容。因此,这不是ASP.NET问题,而是Web客户端如何访问Web服务器的问题......这是为了安全而设计的。

为了让您的应用程序使用这些图像,您可以立即想到几个选项 - 这两个选项都不理想:

  1. ASP.NET代码(在代码隐藏中)需要去抓取文件,并在提供给客户端的html流中提供它,这比复杂的任务要多我怀疑你愿意开始。

  2. ASP.NET代码(使用System.IO)需要从C:\ images \ logo.gif的主页位置获取文件并将其复制到可访问的位置客户端 - 您可以创建一个临时目录,将图像复制到该目录,提供服务,删除它,删除目录。

  3. 如果可能的话,这些都是应该避免的黑客攻击,但是如果你坚持认为这是你想要做的,那么这将允许你通过ASP.NET应用程序来实现。

    最理想的解决方案是将C:\ Images作为虚拟目录添加到您的文档根目录,即/ ImageCentral - 这样您就可以拥有存储在此目录中的多个网站的核心图像,然后可以通过任何网站的客户端只需向每个网站添加指向中央图像文件夹的虚拟目录。正如DaveSwersky指出的那样,不要制作包含敏感信息虚拟目录的任何目录,只要你将虚拟目录添加到外部可见的网站,就可以让人们自由地统治其中的任何信息。

    祝你好运