App_Data文件夹中的图像未显示在浏览器中

时间:2009-10-05 12:28:48

标签: asp.net image app-data

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

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

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

7 个答案:

答案 0 :(得分:44)

App_Data文件夹是为数据库文件等数据保留的特殊文件夹,并且 NOT 将呈现网络上的任何内容。这是设计的,有意的,不能改变(据我所知)。

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

答案 1 :(得分:10)

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

我会在网站的根目录下创建一个/Resources/Resources/Images文件夹。

答案 2 :(得分:5)

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

当我有高调的图片时,我这样做,我不是每个人都得到的,并且让http处理程序缩小图像并加上一些版权文本。太好了!

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

这取决于! ;)

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

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

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

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

希望这有帮助。

答案 5 :(得分:0)

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

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


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

答案 6 :(得分:0)

public string ReturnImage(){
 
alternatively if you wanted to pass a param.

so for example

int WhatEverId = 5;

String folderPath = string.empty;
HostingEnvironment.MapPath("~/App_Data/YourFolder") + @"\" +WhatEverId.ToString());

 string imageYouWantToDisplay = "Test.png";
 string base64String = "";
 String path = HostingEnvironment.MapPath("~/App_Data");
 
 using (Image image = Image.FromFile(path + "/" + imageYouWantToDisplay))
  {
     using (MemoryStream m = new MemoryStream())
      {
        image.Save(m, image.RawFormat);
        byte[] imageBytes = m.ToArray();

        // Convert byte[] to Base64 String
          base64String = Convert.ToBase64String(imageBytes);
      }
    }

    return base64String;

}

然后您可以在操作方法中调用它

public DisplayImages (){
List<WhateverModel> test = new List<WhateverModel>();

 test = GetAll().ToList();

  test.ForEach(x=> { MyImage = ReturnImage();});

  return test;

  }

查看

@model WhateverModel
<img src="@MyImage" /> or in js  <img src="${MyImage}" />