MHT
首先说一下什么是mht格式文件,MHT叫“web单一文件”,就是把网页中包含的图片,CSS文件以及HTML文件全部放到一个MHT文件里面,而且浏览器可以直接读取显示。可以通过ie浏览器将一个网页另存为MHT格式文件体验一下。
步骤
1.添加对Microsoft CDO for Windows 2000 Library 这个Com组件的引用,右键工程->添加引用->选择com组件->在菜单中选择该组件。
2.在前台页面中加一个按钮,用于触发下载。
3.添加关键代码:
protected void download_Click(object sender, EventArgs e)
{
string strMhtContent = string.Empty;//存放下载页面的MHT
byte[] BytMhtContent = null;
try
{ CDO.Message message = new Message();
ADODB.Stream stream = null;
message.MimeFormatted = true;
string url = Request.Url.ToString();
message.CreateMHTMLBody(url, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");//关键代码,将url定位的页面内容转为mht格式
stream = message.GetStream();
stream.Charset = "utf-8";//设置字符格式,和下载页面的格式一致
strMhtContent = stream.ReadText(stream.Size);
//如果是下载自己工程的页面,可以自己标记要删除的部分,只下载自己想要的部分。当然互联网中的任何一个网页页面都可以删除只是不方便标记
int startIndex = strMhtContent.IndexOf("<!--delete start-->");
int endIndex = strMhtContent.IndexOf("<!--delete end-->");
string sss = strMhtContent.Remove(startIndex, endIndex - startIndex);
BytMhtContent = System.Text.Encoding.GetEncoding("gb2312").GetBytes(sss);
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=fileDown.mht");
Response.BinaryWrite(BytMhtContent);
Response.Flush();
message = null;
stream.Close();
Response.Clear();
HttpContext.Current.Response.End();
}
catch (Exception error)
{
throw error;
}
}