IE的MHT文件的BinaryWrite不被视为MHT

时间:2010-08-13 13:24:01

标签: c# asp.net iis mhtml

我有一个嵌入图像的MHTML文件。 MHTML在服务器上生成,然后我通常会使用BinaryWrite传送文件。转换为ASCII并将文件写入磁盘并使用Response.WriteFile后,我也尝试了Server.Transfer,Response.Write。在任何这些情况下,生成的文件都不会(看起来)被视为mht文件。为了设置图像,我尝试了Content-ID和Content-Location。在IE8中查看时,图片网址显示为cid:example1。保存到磁盘后打开文件时,它显示为mhtml:file://C:\DocumentsSettings\benjynito\Desktop\output634172401776447258.mht!cid:example1。或者在使用其中一种方法进行浏览时,您可以获得mhttp://...output123.mht!cid:example1

Output.MimeType是message / rfc822。我也尝试过application / octet-stream和multipart / related。

将文件写入磁盘并使用Response.Redirect可以正常工作。使用直接URL访问文件有效。将文件保存到磁盘然后打开文件。

似乎IE假定请求的HTML结果而不是解密新的内容类型。但你可以为动态样式表,脚本等做这样的事情......所以我真的不相信。我看不出任何明显的差异。我刚试过,BinaryWrite在Opera中运行良好。

如果我绝对不得不担心写入临时目录,然后重定向到文件,我会。我只是希望避免清理临时文件。我想做的不可能吗?编写文件的示例如下。

提前致谢!

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();
}

1 个答案:

答案 0 :(得分:1)

我认为您的Content-Type和Content-Disposition标头不正确。使用Fiddler查看将MHTML作为静态文件下载时的设置。

尝试一种类型的multipart / related和内联的处置。这种组合有效some evidence