MVC 下载文件

        //(1)返回filestream   其中:“text/plain”是文件MIME类型
        public FileStreamResult download()
        {
            string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("~/Document/123.txt");//路径
            return File(new System.IO.FileStream(filePath, System.IO.FileMode.Open), "text/plain", fileName);
        }
        //(2)返回file
        public FileResult downloadA()
        {
            string filePath = Server.MapPath("~/Document/123.txt");//路径
            return File(filePath, "text/plain", "welcome.txt"); //welcome.txt是客户端保存的名字
        }
        public ActionResult FileStreamDownload1()
        {
            var stream = new System.Net.WebClient().OpenRead("https://files.cnblogs.com/ldp615/Mvc_TextBoxFor.rar");
            return File(stream, "application/x-zip-compressed", "test.rar");
        }

 

//(3)TransmitFile方法
        public void downloadB()
        {
            string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("~/Document/123.txt");//路径
            System.IO.FileInfo fileinfo = new System.IO.FileInfo(filePath);
            Response.Clear();         //清除缓冲区流中的所有内容输出
            Response.ClearContent();  //清除缓冲区流中的所有内容输出
            Response.ClearHeaders();  //清除缓冲区流中的所有头
            Response.Buffer = true;   //该值指示是否缓冲输出,并在完成处理整个响应之后将其发送
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", fileinfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/unknow";  //获取或设置输出流的 HTTP MIME 类型
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); //获取或设置输出流的 HTTP 字符集
            Response.TransmitFile(filePath);
            Response.End();
        }
        //(4)Response分块下载
        public void downloadC()
        {
            string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("~/Document/123.txt");//路径

            System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
            if (fileInfo.Exists == true)
            {
                const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
                byte[] buffer = new byte[ChunkSize];

                Response.Clear();
                System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
                long dataLengthToRead = iStream.Length;//获取下载的文件总大小
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
                while (dataLengthToRead > 0 && Response.IsClientConnected)
                {
                    int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                    Response.OutputStream.Write(buffer, 0, lengthRead);
                    Response.Flush();
                    dataLengthToRead = dataLengthToRead - lengthRead;
                }
                Response.Close();
            }
        }

 

posted @ 2018-01-25 16:03  enych  阅读(296)  评论(0编辑  收藏  举报