HTTP协议断点续传
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
namespace HttpDemo
{
class Program
{
//需要下载的路径
static string url = "http://www.aseoe.com/demo/api/jquery_aseoe_001.zip";
//获取文件全称
static string fileName = Path.GetFileName(url);
//保存路径
static string localPath = "D:\\HttpCeShi\\" + fileName;
//未下载完后面加.temp后缀名
static string tempPath = localPath + ".temp";
//偏移量(断点)
static int pos;
static void Main(string[] args)
{
DownLoad();
Console.ReadLine();
}
public static void DownLoad()
{
//如果存在要更新的文件就结束
if (File.Exists(localPath))
return;
Stream localfs = null;
//如果不存在未上传完文件(需断点续传文件)
if (File.Exists(tempPath))
{
localfs = new FileStream(tempPath, FileMode.Open);
}
else
{
localfs = new FileStream(tempPath, FileMode.Create);
}
//获取断点
pos = (int)localfs.Length;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("Accept-Charset", "GBK,utf-8");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Method = "GET";
request.Timeout = 30000;
//文件总长度单位(B)
long total = request.GetResponse().ContentLength;
Console.WriteLine("总长度为:" + total);
if (pos > 0)
request.AddRange(pos);//偏移到断点
HttpWebResponse responseResult = (HttpWebResponse)request.GetResponse();
using (Stream stream = responseResult.GetResponseStream())
{
byte[] buffer = new byte[total - pos];
int readSize = stream.Read(buffer, 0, buffer.Length);
while (readSize > 0)
{
localfs.Write(buffer, 0, readSize);
readSize = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine("已下载:" + localfs.Length);
}
localfs.Close();
File.Move(tempPath, localPath);//将临时文件改为正常文件后缀
Console.WriteLine("下载完成!!!");
}
}
}
}
HTTP协议断点续传的更多相关文章
- 对http协议断点续传的理解
断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载.断点续传需要客户端和服务端都支持. 原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的 ...
- android 多线程断点续传下载
今天跟大家一起分享下Android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...
- [转载]http协议 文件下载原理及多线程断点续传
最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好.起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧.对于HTTP协议,向服务器请 ...
- TCP/IP协议原理与应用笔记02:断点续传
1.断点续传简介: FTP(文件传输协议的简称)(File Transfer Protocol. FTP)客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人 ...
- Http协议的断点续传下载器,使用观察者模式监视下载进度,使用xml保存下载进度。
下载使用Http协议,为了做到断点续传,在点击暂停后,将已下载的大小等数据通过Json存入xml中,当继续传输的时候从xml文件中读取大小继续下载(好几个月前写的,真的想不起来了) bool CHtt ...
- .NET或.NET Core Web APi基于tus协议实现断点续传
前言 前两天我采用技巧式方案基本实现大文件分片上传,这里只是重点在于个人思路和亲身实践,若在实际生产环境要求比较高的话肯定不行,仍存在一些问题需要深入处理,本文继续在之前基础上给出基于tus协议的轮子 ...
- 关于:基于http协议大文件断点续传上传至web服务器
关键部分 前端用file.slice()分块 前端用FileReader获取每一分块的md5值 后端用MultipartFile接受分块文件 后端用FileOutputStream拼装分块文件 话不多 ...
- HTML5实现文件断点续传
HTML5的FILE api,有一个slice方法,可以将BLOB对象进行分割.前端通过FileList对象获取到相应的文件,按照指定的分割方式将大文件分段,然后一段一段地传给后端,后端再按顺序一段段 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
随机推荐
- Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证
一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...
- OpenStack基础概念
openstack 组件介绍 1.horizon -- UI模块 为云管理提供整体视图,以实现资源整合和管理配额 为终端用户提供自动服务门户,在自由范围内自由操作,使用资源 2.keystone -- ...
- Python-mysql索引
MySQL索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询 ...
- 【linux高级程序设计】(第十一章)System V进程间通信 1
System V, 曾经也被称为 AT&T System V,是Unix操作系统众多版本中的一支. 传统上,System V 被看作是两种UNIX"风味"之一(另一个是 B ...
- C3P0连接池工具类使用
c3p0的基本连接配置文件 c3p0-config.xml <c3p0-config> <default-config> <property name="dri ...
- Ubuntu14.04安装配置LAMP环境(php5.6)
sudo apt-get install python-software-properties sudo apt-get update sudo apt-get install vim sudo ap ...
- PHP获取不带后缀的文件名方法
$filename = "test.txt"; $houzhui = substr(strrchr($filename, '.'), 1); $result = basename( ...
- Codeforces Round 480 Div 2 光荣掉分记
痛 痛苦 痛苦啊. 越接近黄名想的越多了啊…… 都说了不要在意rating这破玩意了…… 没出E就算了,策略问题. 居然还FST了: FST个D就算了: FST个A算个**啊. 紧张的时候总会写出一些 ...
- Shader与AGAL(From 7yue)
- (转)stage 3d or unity 3d
这个是这样子的.stage3d如果不使用flascc的话,性能会卡在as上面.你没卡是因为你用的效果还不够高级.往深了走的高端应用就是卡as性能上.这不是你代码能优化了的.我们后来都改用flascc写 ...