ユーザーが選択した内容に応じて、Crystal Report のコンテンツを PDF または Excel ドキュメントに書き込める Web フォーム ページがあります。
2 つの問題があります。
.pdf と .xls の両方の拡張子の場合、拡張子 IE に追加されるブラケットが内側に 1 つ付いています: fileName.xls' 1 '
ユーザーが Excel ドキュメントを選択すると、IE でファイルのダウンロード プロンプトが表示され、ファイルを保存するか開くかを尋ねられます。
PDFファイルは問題なく保存されますが、Excelファイルを開くことを選択すると、エクスプローラーウィンドウが開き、ゴミが表示されます...
コードは次のとおりです。
try
{
permission = new FileIOPermission(FileIOPermissionAccess.Read, output);
fs = File.Open(output, FileMode.Open, FileAccess.Read);
byte[] byteArray = new byte[fs.Length];
fs.Read(byteArray, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
fileName = fileName + '.' + extn;
//Response.AddHeader("Content-Disposition", "attachments;filename=\"" + fileName + ".\"" + extn);
Response.AddHeader("Content-Disposition", "attachments;filename=\"" + fileName + "\"");
Response.AddHeader("Content-Length", byteArray.Length.ToString());
switch ("." + extn)
{
case ".pdf":
Response.AppendHeader("Content-Type", "application/pdf");
break;
case ".xls":
//Response.ContentType = "application/vnd.ms-excel";
//Response.ContentType = "application/octet-stream";
Response.AppendHeader(".xls", "application/excel");
//Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
//Response.AppendHeader("Content-Type", "application/force-download");
break;
case ".txt":
Response.AppendHeader("Content-Type", "application/notepad");
break;
}
FileInfo info = new FileInfo(output);
info.Delete();
Response.BinaryWrite(byteArray);
Response.Flush();
Response.End();
}
catch (Exception ex)
{
if (fs != null)
fs.Close();
}
「 1 」が拡張機能に追加されたという現象を調査してきましたが、それについてはあまり発見されておらず、コードをデバッグして、拡張機能がクリーンであることを確認しました。
私の次の推測は、Response.BinaryWrite(byteArray); で何かが起こっていることです。行または MIME タイプまたはコンテンツ ヘッダー...
ご協力ありがとうございます
ダグ