画像が埋め込まれたMHTMLファイルがあります。MHTMLはサーバー上で生成され、通常はBinaryWriteを使用してファイルを配信します。また、ASCIIに変換してファイルをディスクに書き込み、Response.WriteFileを使用した後、Server.Transfer、Response.Writeを試しました。これらのいずれの場合でも、結果のファイルはmhtファイルとして扱われません(表示されます)。画像を設定するために、Content-IDとContent-Locationを試しました。画像のURLはcid:example1
、IE8で表示したときと同じように表示されます。ディスクに保存した後でファイルを開くと、ととして表示されmhtml:file://C:\Documents
ますSettings\benjynito\Desktop\output634172401776447258.mht!cid:example1
。または、機能する方法の1つを使用してブラウジングしているときに取得しますmhttp://...output123.mht!cid:example1
。
Output.MimeTypeはmessage/rfc822です。また、application/octet-streamとmultipart/relatedも試しました。
ファイルをディスクに書き込み、Response.Redirectを使用すると機能します。直接URLを使用してファイルにアクセスすることはできます。ファイルをディスクに保存してからファイルを開くと機能します。
IEはリクエストに対してHTMLの結果を想定しており、新しいコンテンツタイプを解読していないようです。しかし、動的なスタイルシートやスクリプトなどに対してこのようなことを行うことができるので、私はそれを本当に信じていません。明白な違いは見られませんでした。試したところ、OperaではBinaryWriteが正常に機能します。
一時ディレクトリへの書き込みとファイルへのリダイレクトについてどうしても心配する必要がある場合は、そうします。一時ファイルをクリーンアップする必要がないようにしたいと思っていました。やりたくないことはできませんか?ファイルの書き込み例を以下に示します。
前もって感謝します!
if (response != null && response.Output != null)
{
Response.Clear();
Response.AddHeader("Content-Type", response.Output.MimeType);
Response.AddHeader("Content-Disposition", "attachment;filename=output" + DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture) + "." + response.Output.Extension);
// Response.Write( System.Text.Encoding.ASCII.GetString(response.Output.Bytes));
Response.BinaryWrite(response.Output.Bytes);
//Response.Clear();
//Server.Transfer("/ISV/Forms/Test/output634172397522707394.mht");
//Response.Clear();
//Response.WriteFile( Server.MapPath("/ISV/Forms/Test/output634172397522707394.mht"));
Response.Flush();
Response.End();
}