当我将图像URL属性设置为App_Data文件夹中的asp图像控件时,图像显示在页面设计视图中,但不显示在浏览器中。
<form id="form1" runat="server">
<div>
<asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" />
</div>
</form>
这似乎很简单,但它没有显示图像。
答案 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}" />