Response.AddHeader( "Content-Disposition"、 "attachment; filename =" + Server.HtmlEncode(FileName));を使用しています。ユーザーがローカルマシンにファイルをダウンロードできるように、ユーザーに「ファイルを開く/保存する」ダイアログを表示します。
これはIE7では正常に機能していますが、IE6では、ユーザーが[ファイルを開く/保存する]ダイアログの[開く]ボタンをクリックしてもファイルが開かれません。ネットを調べたところ、Response.AddHeader( "Content-Disposition"、 "inline; filename =" + Server.HtmlEncode(FileName));が見つかりました。 IE6でそれを動作させるために提供する必要があり、それは正常に動作します。
しかし、問題は、ブラウザで開くことができるファイルのほとんどがページ自体で開くことです。つまり、メールページのユーザーが、そこで開いた画像ファイルのダウンロードをクリックすると、IE7の場合のように別のウィンドウで開く必要があります何ができますか...システム内の現在のアプリケーション(Word、Excelなど)で開くbowserで開くことができない他のファイル。
両方のIEで同じコードを使用する方法を提案してください...使用したコードはここにあります..。
Response.AddHeader("Content-Disposition", "attachment; filename=" +FileName);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = ReturnExtension(file.Extension.ToLower());
Response.TransmitFile(file.FullName);
Response.End();
private string ReturnExtension(string fileExtension)
{
switch (fileExtension)
{
case ".txt":
return "text/plain";
case ".doc":
return "application/ms-Word";
case ".xls":
return "application/vnd.ms-Excel";
case ".gif":
return "image/gif";
case ".jpg":
case "jpeg":
return "image/jpeg";
case ".bmp":
return "image/bmp";
case ".wav":
return "audio/wav";
case ".ppt":
return "application/mspowerpoint";
case ".dwg":
return "image/vnd.dwg";
default:
return "application/octet-stream";
}
}
IE 6で問題を発見しました。コンテンツを読み取り、バッファとバイナリ書き込みを使用してファイルを開く必要がありますIE 6 、、以下のコードは機能しますIE6では問題ありません
FileStream sourceFile = new FileStream(Server.MapPath(@"FileName"), FileMode.Open);
float FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = ReturnExtension(file.Extension.ToLower());
Response.AddHeader("Content-Length", getContent.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.BinaryWrite(getContent);
Response.Flush();
Response.End();
コンテンツタイプをオクテットストリームに設定してみてください。
Response.ContentType = "application/octet-stream";