Asp.Net 分段,断点,下载
{
UtilLite.Guard<ArgumentNullException>(context == null);
FileInfo file = new FileInfo(filePath);
UtilLite.Guard<FileNotFoundException>(!file.Exists);
context.Response.Clear();
context.Response.Buffer = false;
context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(file.Name)));
context.Response.AppendHeader("Content-Length", file.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.WriteFile(filePath);
context.Response.Flush();
context.Response.End();
}
public static void Range(HttpContext context, string filePath)
{
UtilLite.Guard<ArgumentNullException>(context == null);
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
Response.Clear();
Response.Buffer = false;
Response.AddHeader("Accept-Ranges", "bytes");
int bufferSize = 4096;
byte[] buffer = new byte[bufferSize];
using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize))
{
long p = 0L, l = stream.Length;
#region Resolve Range
string range = Request.Headers["Range"];
if (range != null)
{
//Range:bytes=1024-
//Range:bytes=1024-2048
//Range:bytes=-1024
//Range:bytes=0-512,1024-2048
int index = range.IndexOf("=");
if (index != -1)
{
string[] ranges = range.Substring(index + 1).Split(',');
if (ranges.Length > 1)
{
//not supported multipart/byterange
}
else
{
bool flag = false;
if (ranges[0].StartsWith("-"))
{
long _p, _absp;
if (long.TryParse(ranges[0], out _p) && (_absp = Math.Abs(_p)) <= l)
{
if (_p < 0)
{
p = l - _absp;
l = _absp;
flag = true;
}
}
}
else
{
ranges = ranges[0].Split('-');
if (ranges.Length == 2)
{
long _p, _l;
if (ranges[1] == string.Empty)
{
if (long.TryParse(ranges[0], out _p) && _p <= l)
{
p = _p;
flag = true;
}
}
else if (long.TryParse(ranges[0], out _p) && long.TryParse(ranges[1], out _l) && _p > 0 && _l > 0 && _p < _l && _l < l)
{
p = _p;
l = _l + 1;
flag = true;
}
}
}
if (flag)
{
Response.StatusCode = 206;
Response.AddHeader("Content-Range", "bytes " + p.ToString() + "-" + l.ToString() + "/" + stream.Length.ToString());
}
else
{
Response.StatusCode = 416; //Requested range not satisfiable
}
}
}
}
#endregion
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(Path.GetFileName(filePath))));
Response.AddHeader("Content-Length", l.ToString());
Response.ContentType = "application/octet-stream";
stream.Position = p;
int read;
while (Response.IsClientConnected && p < l)
{
Response.OutputStream.Write(buffer, 0, read = stream.Read(buffer, 0, bufferSize));
Response.Flush();
p += read;
}
}
Response.End();
}
转载于:https://www.cnblogs.com/Googler/archive/2010/08/19/1803809.html
Asp.Net 分段,断点,下载相关推荐
- 带进度条的ASP无组件断点续传下载代码
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%Option Explicit%> <% '= ...
- SpringBoot+Vue 实现大文件断点下载
目录 效果 代码 SpringBoot Vue 效果 步骤 点击下载 在输入框输入下载的文件名称 点击暂停 再次点击开始 下载完成 代码 SpringBoot pom <!-- 做断点下载使用- ...
- Android 多线程断点下载demo实现
先来一张效果图: 主要实现思路: 每一个下载都是通过RandomAccessFile对下载资源的总长进行切割之后,根据我们设置的线程多少进行计算之后开启多线程下载的.而每一个任务都是一个AsyncTa ...
- 高并发多线程分片断点下载
基于Java的高并发多线程分片断点下载 首先直接看测试情况: 单线程下载72MB文件 7线程并发分片下载72MB文件: 下载效率提高2-3倍,当然以上测试结果还和设备CPU核心数.网络带宽息息相关. ...
- iOS网络-NSURLSessionDataTask大文件离线断点下载
什么叫离线断点下载,就是用户下载中关闭程序重新打开可以继续下载 代码实现如下: #import "ViewController.h" @interface ViewControll ...
- libcurl断点下载遇到的问题
最近游戏把资源(图片.配置.lua)的加载.更新全部改了 ,加载其实还好,就是不走之前的zip解压方式. 以前的大体流程: 下载 –> 启动 –> 解压 –> 更新 –> 进入 ...
- 使用NSURLConnection实现大文件断点下载
使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...
- Android多线程断点下载
到华为后,信息管理特别严格,文件不能外发.所以好久都没写博客了,今天周日,老婆非要我学习.就闲来无事,写一篇博客,呵呵-- 前段时间,项目中提到了断点下载apk并静默安装的需求.本打算用应用市场成熟的 ...
- iOS开发网络篇—多线程断点下载
iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...
- 一行代码快速搞定Flowable断点下载(下)
一行代码快速搞定Flowable断点下载(下) 其实这个主题对应的三篇文章真的真的非常难写,首先是感觉非常多人对于函数式编程不太熟悉,然后又有一些人对于kotlin不太熟悉.这就导致了,写这三篇文章的 ...
最新文章
- cuDNN 功能模块解析
- 2021年高考模拟考成绩查询,2021年湖北省普通高考模拟考试成绩查询
- 表操作,数据操作,单表查询,python操作数据库
- Android studio导出的apk在真机上安装提示“文件不存在或已失效”的解决方法
- c语言中如何让诊断代码右移_如何检测和诊断生产中的慢代码
- (算法)宝石升级问题
- 解析 react、vue等路由参数的库 path-to-regexp
- Java——集合经典面试题
- NG2入门 - 架构
- mysql allowed packet_修改mysql的max_allowed_packet值
- Python 根据图片url,批量下载图片
- SQL Server 2008查询IP地址方法
- Android 10去除电池图标以及设置
- C++用*和空格输出一个正方形及其对角线
- MySQL 连接挂死了!该如何排查?
- Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
- 深度学习21_李宏毅_02_Regression_P2
- 数字签名(1) 证书下载
- CTF_Misc_【BUUCTF】 杂项——二维码Code
- QA-GNN: Reasoning with Language Models and Knowledge Graphsfor Question Answering
热门文章
- 静态路由实验配置举例
- php_mvc实现步骤五
- 全球唯一标识符:GUID在线生成
- Flink – window operator
- Js里面IF(var)表示什么意思?js中if的写法、含义
- jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理
- 卸载linux下的mysql数据库实例_Linux下卸载MySQL数据库实例教程
- mysql5.5表的创建源码_mysql5.5 源码安装
- python多行注释符号_python知识学习,python标识符和关键字
- java之上三角矩阵_7-1 判断上三角矩阵