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:Documents
和SettingsenjynitoDesktopoutput634172401776447258.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的主要内容,如果未能解决你的问题,请参考以下文章