c/s架构文件传输

在做程序升级的功能中接触到文件下载的知识,这里找了一些代码给和我一样的初学者学习一下

服务端(这里以ASP.NET和ASP.NET MVC为例):

ASP.NET代码

1.TransmitFile方法输出文件

protected void Page_Load(object sender, EventArgs e)
        {
            string filename = Server.MapPath("test.7z");
            string filenameAddHeader = "attachment;filename=" + filename + "\"";
            Response.ContentType = "application/x-zip-compressed";
            //将文件名,类型写入http头信息
            Response.AddHeader("Content-Disposition", filenameAddHeader);
            //微软提供的TransmitFile方法,可以防止传输大文件时,传输中断
            Response.TransmitFile(filename);
        }

2.使用流输出的方法

protected void Page_Load(object sender, EventArgs e)
        {
            //WriteFile实现下载,此方法可能因大文件传输时间过长而中断
            //客户端保存的文件名
            string fileName = "test.7z";
            //路径
            string filePath = Server.MapPath("test.7z");
            FileInfo fileInfo = new FileInfo(filePath);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            Response.End();
        }

ASP.NET MVC代码

public ActionResult Index()
        {
            string fileName = Server.MapPath("test.7z");
            string contentType = "application/x-zip-compressed";
            string fileDownloadName = Path.GetFileName(fileName);
            //File方法输出
            //参数: fileName:需要输出的文件;contentType:文件类型 ;fileDownloadName:向浏览器声明文件名
            return File(fileName, contentType, fileDownloadName);
        }

 

C#客户端下载文件

#region 下载更新文件,从http头部获取文件名,返回文件名列表
        /// <summary>
        /// 下载服务器更新文件,从http头部获取文件名,返回文件名列表
        /// </summary>
        /// <param name="url">文件下载地址</param>
        /// <param name="filesSavePath">文件保存路径</param>
        /// <param name="filename">保存的文件名</param>
        public void DownLoadGetNameFromHttp(string url, string filesSavePath, ref string filename)
        {
            WebClient client = new WebClient();
            client.OpenRead(url);
            string name = client.ResponseHeaders["Content-Disposition"].Replace("attachment;filename=", "");
            if (name == null)
            {
                //如果从头部信息获取文件名为空,给name赋值默认名称
                name = "DefaultNmae";
            }
            filename = name;
            client.DownloadFile(url, filesSavePath + @"\" + name);
        }
        #endregion

 

posted @ 2017-02-27 16:17  单晶体  Views(562)  Comments(0)    收藏  举报