博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分块下载文件的思路
阅读量:6960 次
发布时间:2019-06-27

本文共 1326 字,大约阅读时间需要 4 分钟。

  如果多人访问服务器,从服务器中下载文件,服务器将会承受巨大的压力。所以,在编写下载文件代码时要考虑到服务器的承受能力。很多读者都是直接读取整个文件进行下载,显然这种下载方式很不科学。采用分块下载文件,每次从服务器中读取固定大小的文件,会大大的缓解了多人访问时给服务器带来的压力。

1,使用File类的OpenRead方法以文件流的形式打开要下载的文件以便进行读取。

2,使用FileStream类的Length属性获取打开的文件流的长度。

3,使用FileStream类的Read方法开始从文件流中读取固定大小的字节块并存储到byte数组中。

4,使用OutputStrem对象的Write方法将读取的文件写入输出流中。

5,从文件流总长度中减去已读取的长度。

6,继续执行3中的代码读取文件。

private void DownLoadFile(string path)    {        string serverpath = Server.MapPath(path);        FileInfo fi = new FileInfo(serverpath);        if (fi.Exists)        {            const long size = 2048;//2K            byte[] buffer = new byte[size];            Response.Clear();            FileStream fs = File.OpenRead(serverpath);            long data = fs.Length;            Response.ContentType = "application/octet-stream";            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(serverpath)));            while (data > 0 && Response.IsClientConnected)            {                int readlength = fs.Read(buffer, 0, Convert.ToInt32(size));                Response.OutputStream.Write(buffer, 0, readlength);                Response.Flush();                data = data - readlength;            }            Response.Close();        }    }

 

转载于:https://www.cnblogs.com/chirifengye/archive/2012/12/26/2833636.html

你可能感兴趣的文章
pinpoint 1.6.1 安装
查看>>
javax.net.ssl.SSLHandshakeException(Cas导入证书)
查看>>
我的友情链接
查看>>
为 Neutron 准备物理基础设施(I) - 每天5分钟玩转 OpenStack(75)
查看>>
【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
查看>>
新手应该搞明白的java知识
查看>>
全文搜索引擎 ElasticSearch
查看>>
ireport+springMVC生成pdf
查看>>
TCP连接建立(三次握手)
查看>>
Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist 的解决方法...
查看>>
我的友情链接
查看>>
html生成pdf
查看>>
项目进度管理与项目陈本管理
查看>>
LinearLayout的隐藏与显示
查看>>
Android studio使用自定义的格式化文件或者eclipse的格式文件
查看>>
sublime px dp vw换算rem
查看>>
NYOJ 16 矩形嵌套(动态规划)
查看>>
eclipse导入tomcat 8.0x源码
查看>>
shell脚本——爬取域名一级页面元素并判断其可缓存性
查看>>
Linux平台下代理服务器的实现(squid)
查看>>