读文件输出

来源:互联网 发布:网络交流环境 编辑:程序博客网 时间:2024/06/18 14:41
    public class FileResult : ActionResult    {        public FileResult() { }         /// <summary>        /// 文件显示名称必须带后缀名        /// </summary>        public string FileName;        /// <summary>        /// 文件绝对路径        /// </summary>        public string FilePaht;         public override void ExecuteResult(ControllerContext context)        {            if (FileName.IndexOf(".") == -1)            {                int t = FilePaht.LastIndexOf(".");                if (t != -1)                {                    FileName += FilePaht.Substring(t);                }            }              System.IO.Stream iStream = null;            //定义缓冲区大小为300k            int bufferLenth = 300000;            byte[] buffer = new Byte[300000];            //文件长度            int length;            try            {                //打开文件                iStream = new System.IO.FileStream(FilePahtSystem.IO.FileMode.Open,                System.IO.FileAccess.ReadSystem.IO.FileShare.Read);                long dataToRead = iStream.Length;//文件总大小                 context.HttpContext.Response.ContentEncoding = System.Text.Encoding.UTF8;                context.HttpContext.Response.AddHeader("Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(FileNameSystem.Text.Encoding.UTF8));                context.HttpContext.Response.AddHeader("content-type""application/octet-stream;charset=utf8");                   //读取字节                while (dataToRead > 0)                {                    context.HttpContext.Response.Clear();                    bool cc = context.HttpContext.Response.SuppressContent;                    //判断客户端是否在线                    if (context.HttpContext.Response.IsClientConnected)                    {                        length = iStream.Read(buffer, 0, bufferLenth);                                               if (length < bufferLenth)                        {                            buffer = buffer.AsEnumerable().Take(length).ToArray();                        }                        context.HttpContext.Response.BinaryWrite(buffer);                        try                        {                            if (length < bufferLenth)                            {                                context.HttpContext.Response.Flush();                                buffer = new Byte[length];                                dataToRead = dataToRead - length;                            }                            else                            {                                 context.HttpContext.Response.Flush();                                buffer = new Byte[bufferLenth];                                dataToRead = dataToRead - length;                            }                        }                        catch                        {                            dataToRead = -1;                        }                    }                    else                    {                        dataToRead = -1;                    }                }            }            catch (Exception ex)            {                context.HttpContext.Response.Write("Error : " + ex.Message);            }            finally            {                if (iStream != null)                {                    iStream.Close();                }            }        }     }}
0 0
原创粉丝点击