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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IE的MHT文件的BinaryWrite不被视为MHT相关的知识,希望对你有一定的参考价值。

我有一个嵌入图像的Mhtml文件。 MHTML在服务器上生成,然后我通常会使用BinaryWrite传送文件。转换为ASCII并将文件写入磁盘并使用Response.WriteFile后,我也尝试了Server.Transfer,Response.Write。在任何这些情况下,生成的文件都不会(看起来)被视为mht文件。为了设置图像,我尝试了Content-ID和Content-Location。在IE8中查看时,图像URL显示为cid:example1。保存到磁盘后打开文件时,它显示为mhtml:file://C:DocumentsSettingsenjynitoDesktopoutput634172401776447258.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();
}
答案

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

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

以上是关于IE的MHT文件的BinaryWrite不被视为MHT的主要内容,如果未能解决你的问题,请参考以下文章

怎么把浏览器的网页另存为mht格式的

怎么用搜狗浏览器保存网页为mht

类内部引入的类名不被视为嵌套类名

在chrome浏览器中怎么样把网页保存成单个mht文件

直接在 HTML 文件中嵌入 JPEG

C# 从 MHT 文件中提取 HTML