Я поддерживаю приложение, которое имеет страницу .aspx, которая загружает изображение из базы данных и использует Response.BinaryWrite (), чтобы записать его обратно клиенту. Это отлично сработало не так давно. Две вещи изменились, мы обновили приложение до .NET 3.5, и они обновили все компьютеры на работе до IE7.
Все отлично работает на Firefox, но все, что я получаю в IE7, это красный X. Итак, я предполагаю, что эта проблема связана с IE7? Есть ли где-нибудь настройки безопасности, которые не позволяют загружать изображения из формы .aspx? Он уже настроен для отображения на основе типа контента, а не расширения.
Вот часть кода. Как я уже сказал, я просто поддерживаю это приложение и не написал его. Я знаю, что использование Session - не лучший способ сделать это, но это то, что у меня есть, а оператор switch - просто «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:
Хорошо, я последовал вашим предложениям и, немного углубившись в исследование, я изменил метод на следующий, но он все еще не работает.
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();
}