我有一個MHTML文件,其中嵌入圖像。 MHTML是在服務器上生成的,然後我通常會使用BinaryWrite來交付文件。在轉換爲ASCII並將文件寫入磁盤並使用Response.WriteFile之後,我也嘗試了Server.Transfer,Response.Write。在任何這些情況下,結果文件不會(看起來)被視爲mht文件。爲了設置圖像,我嘗試了Content-ID和Content-Location。在IE8中查看時,圖像URL顯示爲cid:example1
。保存到磁盤後打開文件時,它顯示爲mhtml:file://C:\Documents
和Settings\benjynito\Desktop\output634172401776447258.mht!cid:example1
。或者在使用其中一種方法進行瀏覽時,您會得到mhttp://...output123.mht!cid:example1
。MHT文件BinaryWrite不被視爲MHT通過IE
Output.MimeType是message/rfc822。我也試過應用程序/八位字節流和多部分/相關。
將文件寫入磁盤並使用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();
}
我會試試看。我注意到內容長度沒有顯示在標題下,但是我的二進制編寫的文件使用g-zip編碼,因此我要嘗試手動設置該標題。否則,標題排隊很好,我已經嘗試匹配標題了。感謝您的迴應。 – 2010-08-13 13:40:31
嗯,還沒有完全弄清楚,但我懷疑它與我的MHT文件格式的東西。我已經能夠採取一個IE生成的MHT文件,並對它做一個BinaryWrite,它的工作原理。 – 2010-08-13 15:19:25
好吧,這將解釋它。 – 2010-08-13 18:17:29