Je maintiens une application qui a une page .aspx qui charge sur l'image de la base de données et utilise Response.BinaryWrite() pour l'écrire au client. Cela a fonctionné parfaitement il n'y a pas longtemps. Deux choses ont changé, nous avons mis à jour l'application vers .NET 3.5 et ils ont mis à niveau tous les ordinateurs au travail à IE7..aspx page Image Response.BinaryWrite sur IE7
Tout fonctionne bien sur Firefox, mais tout ce que je reçois dans IE7 est un X rouge. Donc je suppose que ce problème est lié à IE7? Y at-il un paramètre de sécurité quelque part qui l'empêcherait de charger des images à partir d'un formulaire .aspx? Il est déjà configuré pour s'afficher en fonction du type de contenu et non de l'extension.
Voici une partie du code. Comme je l'ai dit, je maintiens juste cette application et je ne l'ai pas écrite. Je sais que l'utilisation de Session n'est pas une excellente façon de le faire, mais c'est ce que j'ai et l'instruction switch est juste un "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, je l'ai suivi vos suggestions et par un peu plus de recherches que j'ai changé la méthode pour ce qui suit, mais il ne fonctionne toujours pas.
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();
}