Ich verwalten eine Anwendung, die eine ASPX-Seite hat, die auf Bild aus der Datenbank geladen und Response.BinaryWrite() verwendet, um es zurück auf den Client zu schreiben. Dies hat vor nicht allzu langer Zeit perfekt funktioniert. Zwei Dinge haben sich geändert: Wir haben die Anwendung auf .NET 3.5 aktualisiert und alle Computer bei der Arbeit auf IE7 aktualisiert.ASPX-Seite Response.BinaryWrite Bild auf IE7
Alles funktioniert gut auf Firefox, aber alles, was ich in IE7 bekomme, ist ein rotes X. Also nehme ich an, dass dieses Problem mit IE7 verwandt ist? Gibt es irgendwo eine Sicherheitseinstellung, die das Laden von Bildern aus einem ASPX-Formular verhindern würde? Es ist bereits so eingestellt, dass es basierend auf dem Inhaltstyp und nicht auf der Erweiterung angezeigt wird.
Hier ist ein Teil des Codes. Wie gesagt, ich behalte diese App und habe sie nicht geschrieben. Ich weiß, dass die Verwendung von Session keine gute Möglichkeit ist, es zu tun, aber es ist was ich habe und die switch-Anweisung ist nur ein "wtf?".
<asp:image id="imgContent" runat="server" Visible="true" ImageUrl="ProductContentFormImage.aspx"></asp:image>
protected void Page_Load(object sender, System.EventArgs e)
{
Hashtable hshContentBinary = (Hashtable)Session["hshContentBinary"];
byte[] content = (byte[]) hshContentBinary["content"];
string extension = (string) hshContentBinary["extension"];
string contentTypePrefix = "application";
switch(extension.ToLower())
{
case "gif":
case "jpg":
case "bmp":
contentTypePrefix = "image";
break;
case "tif":
contentTypePrefix = "image";
break;
case "tiff":
contentTypePrefix = "image";
break;
case "eps":
contentTypePrefix = "image";
break;
default:
Response.AppendHeader(
"Content-disposition",
"attachment; filename=content." + extension);
break;
}
Response.ContentType = contentTypePrefix + "/" + extension;
Response.BinaryWrite(content);
}
EDIT:
OK, folgte ich Ihre Vorschläge und durch ein wenig mehr Forschung habe ich die Methode in die folgenden geändert, aber es funktioniert immer noch nicht.
protected void Page_Load(object sender, System.EventArgs e)
{
Hashtable hshContentBinary = (Hashtable)Session["hshContentBinary"];
byte[] content = (byte[]) hshContentBinary["content"];
string extension = (string) hshContentBinary["extension"];
string contentType;
string contentDisposition = "inline; filename=content." + extension;
Response.ClearContent();
Response.ClearHeaders();
Response.Clear();
switch(extension.ToLower())
{
case "gif":
contentType = "image/gif";
break;
case "jpg":
case "jpe":
case "jpeg":
contentType = "image/jpeg";
break;
case "bmp":
contentType = "image/bmp";
break;
case "tif":
case "tiff":
contentType = "image/tiff";
break;
case "eps":
contentType = "application/postscript";
break;
default:
contentDisposition = "attachment; filename=content." + extension;
contentType = "application/" + extension.ToLower();
break;
}
Response.Buffer = true;
Response.Expires = 0;
Response.ContentType = contentType;
Response.AddHeader("Content-Length", content.Length.ToString());
Response.AddHeader("Content-disposition", contentDisposition);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(content);
Response.End();
}