首页后端开发ASP.NETAsp.net中断点续传的原理与实现方法分享

Asp.net中断点续传的原理与实现方法分享

时间2024-02-01 09:46:02发布访客分类ASP.NET浏览138
导读:收集整理的这篇文章主要介绍了Asp.net中断点续传的原理与实现方法分享,觉得挺不错的,现在分享给大家,也给大家做个参考。 请求协议是由客户机 (浏览器 向服务器(WEB SERVER)...
收集整理的这篇文章主要介绍了Asp.net中断点续传的原理与实现方法分享,觉得挺不错的,现在分享给大家,也给大家做个参考。 请求协议是由客户机 (浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议。回复协议是由服务器(web server),向客户机(浏览器)回复报文时的协议。请求和回复协议都由头和体组成。头和体之间以一行空行为分隔。
以下是一个请求报文与相应的回复报文的例子:
复制代码 代码如下:
GET /image/index_r4_c1.jpg HTTP/1.1
Accept: */*
Referer: http://192.168.3.120:8080
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
Host: 192.168.3.120:8080
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: Microsoft-iIS/5.0
Date: Tue, 24 Jun 2003 05:39:40 GMT
Content-tyPE: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 23 May 2002 03:05:40 GMT
ETag: "bec48eb862c21:934"
Content-Length: 2827
….

  顾名思义,断点续传就是在上一次下载时断开的位置开始继续下载。在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。
  比如说从第1024字节开始下载,请求报文如下:
复制代码 代码如下:

GET /image/index_r4_c1.jpg HTTP/1.1
Accept: */*
Referer: http://192.168.3.120:8080
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
Host: 192.168.3.120:8080
Range:bytes=1024-
Connection: Keep-Alive

相应的响应报文为
复制代码 代码如下:
HTTP/1.1 206 Partial Content
Server: Microsoft-IIS/5.0
Date: Tue, 24 Jun 2003 05:39:40 GMT
Content-Type: image/jpeg
Accept-Ranges: bytes
Last-Modified: Thu, 23 May 2002 03:05:40 GMT
ETag: "bec48eb862c21:934"
Content-Length: 1803
Content-Range: bytes 1024-1803/2827

通过两段不同的报文可以看到,在断点续传时,我们只要能给客户端相应相应的报文,使客户端能正确响应,并且传送续传点后的部分文件即可实现断点续传。
1. 区分断点续传报文。
由于断点续传报文中含有Range字段,因此,只要通过Request.Headers["Range"]是否为null即可。
2. 发送正确的续传响应报文
两次响应报文不同的部分在报文中已经用红色部分标识出来,只需修改红色部分报文头,便能发送正确的续传报文。
3. 传送正确的文件部分
续传的时候只需要传送续传点之后的文件即可,首先通过请求报文中的Range字段获取文件的开始位置,传送文件的时候只需要传送该位置之后的部分即可。
下面的代码示例显示了一个可以支持断点续传的 ASP.NET 页
复制代码 代码如下:
PRivate void Page_Load(object sender, System.Eventargs e)
{
string file = MapPath("ff.zip");
Fileinfo fi=new FileInfo (file);

long startPos = 0;

//所传输的文件长度
long fileTranLen = fi.Length;

//断点续传请求
if (Request.Headers["Range"] != null)
{
Response.statusCode = 206;
startPos = long.Parse(Request.Headers["Range"].Replace("bytes=", "").SplIT('-')[0]);
fileTranLen -= startPos;

//Response.AddHeader("Accept-Ranges", "bytes");
//Content-Range: bytes [文件块的开始字节]-[传输文件的总大小]/[文件的总大小]
Response.AddHeader("Content-Range", string.Format("bytes { 0} -{ 1} /{ 2} ",startPos,fileTranLen,fi.Length));
}

Response.AddHeader("Content-Length", fileTranLen.ToString());

//基本的文件下载报文头
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fi.Name);

//简单的流拷贝
System.IO.Stream fileStream = System.IO.File.OpenRead(file);
fileStream.Position = startPos;

byte[] buffer = new Byte[1024];
int count;
while ((count = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, count);
}
fileStream.Close();

Response.End();
}
您可能感兴趣的文章:@H_987_126@
  • 在ASP.NET中支持断点续传下载大文件(ZT)源码
  • ASP.NET 文件断点续传实现代码
  • .NET或.NET Core Web APi基于tus协议实现断点续传的示例
  • 声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

    上一篇: ASP.NET在IIS上注册报0x800702e4...下一篇:asp.net中ADO SQL数据库 笔记汇总...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

    若转载请注明出处: Asp.net中断点续传的原理与实现方法分享
    本文地址: https://pptw.com/jishu/595238.html
    如何在Vue中实现Svelte的Defer Transition 在.NET中使用Newtonsoft.Json转换,读取,写入的方法介绍

    游客 回复需填写必要信息