2009-10-05 159 views
17

当我将图像URL属性设置为App_Data文件夹中的asp图像控件时,图像显示在页面设计视图中,但在浏览器中未显示。App_Data文件夹中的图像未在浏览器中显示

<form id="form1" runat="server"> 
<div> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" /> 
</div> 
</form> 

它似乎很简单,但它没有显示图像。

回答

38

App_Data文件夹是为数据库中的数据库文件等保留的特殊文件夹,并且不会渲染出网上的任何内容。这是设计的,有意的,不能改变(据我所知)。

您的图片绝对不属于App_Data子文件夹 - 将它们放入/images文件夹或其他更合适的文件夹中。

8

图像不应该存储在App_Data文件夹中。这是保留的文件,不应该直接提供给用户,如.mdb数据库文件等。

我会创建一个/Resources/Resources/Images文件夹脱离站点的根目录。

+0

谢谢克里斯... – 2009-10-05 12:39:49

+0

大家好,但问题是,当我尝试在根中创建'/ Resources/Images'文件夹,然后我得到访问被拒绝错误(当该网站托管在IIS中).WHat在IIS用户帐户w./o的根目录中创建目录的最佳方法是在整个根目录上给予用户帐户权限?是否有可能?当我尝试在根目录内创建目录时,获取访问被拒绝错误。 – Sagar 2012-06-06 08:42:16

3

好的,做不可能的时间...尽管无法直接从app_data文件夹加载图像,但您可以编写自己的http处理程序,它将从app_data文件夹中读取图像文件并将其发送回客户机。这将是一个解决方法,但总的来说,数据仅适用于您的应用程序可以读取的数据。通过让处理程序读取数据,您仍然可以返回这些图像。

但这是不好的做法,如果你会为我工作,你会立即被解雇!

+2

即使考虑如何绕过asp.net允许从app_data提供图像是一个坏主意...... – 2009-10-05 12:42:16

+0

感谢分享想法。 – 2009-10-05 12:43:02

+2

@克里斯,我同意!我会自杀! ;-) – 2009-10-05 12:44:49

4

我不同意。将图像隐藏在App_Data文件夹中并创建自己的http处理程序时,您可以保护图像并在显示图像之前在图像上添加版权文字等。

我这样做,当我有高分辨率的图片我不想每个人都得到,并有http处理程序缩小图像,并把一些版权文字。大!

0

来自App_Data文件夹的内容可以提供,但不能直接提供。
直接访问是不可能的,不建议间接访问。这是故意的。

但是,添加虚拟路径可以做到这一点。 看到这个question


我认为前三个答案符合您的目的。
将图像存储在全局资源文件夹或本地资源文件夹中,这些文件也是特殊文件夹,可以通过程序访问内容。

0

这要看! ;)

保存图像在App_Data有很好的理由。在用户可以上传文件或徽标的情况下,它将保护这些文件,而不会让其他用户访问或公开。

最重要的是,它是每个服务器/部署实例具有不同文件的唯一方法。

部署应用程序时,您可以通过在部署配置中启用“从App_Data中排除文件”来保护用户为每个服务器实例上载的这些文件。

如果您想通过url访问这些文件,请使用下载处理程序downloadfile.ashx。

希望这会有所帮助。