0

画像が埋め込まれた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();
}
4

1 に答える 1

1

Content-TypeヘッダーとContent-Dispositionヘッダーが正しくないと思います。Fiddlerを使用して、MHTMLを静的ファイルとしてダウンロードしたときに設定されている内容を確認します。

マルチパート/関連のタイプとインラインの配置を試してください。この組み合わせが機能するといういくつかの証拠があります。

于 2010-08-13T13:26:07.373 に答える