- 郁闷了一天终于搞定这个问题了,出现这个问题时候文件其实内容还是可以打开的,就是出现以上的错误原因。经过最终分析确定了具体原因,是因为在Response下载文档时候,最后需要结束
System.Web.HttpContext.Current.Response.End();否则默认为不完整下载状态。反正我加上去后就不出现以上情况了。具体代码如下:
/// <summary> /// 下载文件 /// </summary> public void LoadPaperTemplate(string mStrFileName) { FileStream fs = null; BinaryReader br = null; BinaryWriter brnew = null; try { //给内容赋值 string path = System.Web.HttpContext.Current.Server.MapPath("~/Template"); string mStrFileRoot = string.Format("{0}\\{1}", path, mStrFileName); if (File.Exists(mStrFileRoot)) { fs = new System.IO.FileStream(mStrFileRoot, System.IO.FileMode.Open); br = new BinaryReader((Stream)fs); byte[] bytes = br.ReadBytes((Int32)fs.Length); brnew = new BinaryWriter(fs); brnew.Write(bytes, 0, bytes.Length); System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.Buffer = true; System.Web.HttpContext.Current.Response.Charset = "GB2312"; System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(mStrFileRoot.Substring(mStrFileRoot.LastIndexOf('\\') + 1))); System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); System.Web.HttpContext.Current.Response.ContentType = "application/ms-word"; System.Web.HttpContext.Current.Response.BinaryWrite(bytes); System.Web.HttpContext.Current.Response.Flush(); System.Web.HttpContext.Current.Response.End(); } } catch (Exception) { //throw; } finally { br.Close(); brnew.Close(); fs.Close(); } }