断点续传

用Java实现HTTP断点续传(2)

故事扮演 提交于 2019-12-07 08:46:44
(二) Java 实现断点续传的关键几点 (1)用什么方法实现提交RANGE: bytes=2000070-。 当然用最原始的Socket是肯定能完成的,不过那样太费事了,其实Java的net包中提供了这种功能。代码如下: URL url = new URL(" http://www.sjtu.edu.cn/down.zip";;); HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection (); //设置User-Agent httpConnection.setRequestProperty("User-Agent","NetFox"); //设置断点续传的开始位置 httpConnection.setRequestProperty("RANGE","bytes=2000070"); //获得输入流 InputStream input = httpConnection.getInputStream(); 从输入流中取出的字节流就是down.zip文件从2000070开始的字节流。大家看,其实断点续传用Java实现起来还是很简单的吧。接下来要做的事就是怎么保存获得的流到文件中去了。 保存文件采用的方法 我采用的是IO包中的RandAccessFile类。 操作相当简单

用 Java 实现断点续传 (HTTP)

不羁岁月 提交于 2019-12-07 08:46:31
断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type

Delphi用ICS控件进行断点续传

廉价感情. 提交于 2019-12-06 20:27:55
Delphi用ICS控件进行断点续传 原帖地址: http://www.lonetear.net/bbs/read.asp?id=36143 原帖地址2(傻猫): http://www.samool.com/archives/41252/ 用HTTPCLI和NMHTTP都可以实现断点续传,原理都一样,但是由于HTTPCLI支持带用户名和密码的HTTP代理,NMHTTP不支持,HTTPCLI还支持SOCK4、SOCK5代理,因此我选用HTTPCLI来实现。 主要是通过HTTPCLI的ContentRangeBegin和ContentRangeEnd属性来控制,ContentRangeBegin是指从哪个字节开始下载,ContentRangeEnd是指下载到哪个字节为止,如果留空则表示下载到文件结束。例如 httpcli1.ContentRangeBegin:='100'; //从100字节的位置开始下载 httpcli1.ContentRangeEnd:='200'; //下载到200字节的地方停止 httpcli1.ContentRangeBegin:='100'; //从100字节的位置开始下载 httpcli1.ContentRangeEnd:=''; //下载到文件结束 看下面的例子 var f:TSearchRec; FindFirst(fname,faAnyFile,f)

课外知识----断点续传

拈花ヽ惹草 提交于 2019-12-06 15:06:23
1 文件不分块 客户端会记录当前服务器的已经上传文件的大小,等到下载网络连接成功,给服务器发生我已经上传文件的大小,并继续发生字节 服务器接收已经上传文件的大小,用这个大小来将移动文件的cursor,进行append 2 文件分块 客户端首先将需要上传的文件分块,网络恢复正常,已经上传的文件分块不在上传,上传失败的文件分块重新上传 服务器将接受到的文件分块进行合并 Web客户端实现断点上传功能 WebUploader 官网:fexteam.gz01.bdysite.com/webuploader/ 来源: https://www.cnblogs.com/yanxiaoge/p/11991706.html

大文件批量上传断点续传文件秒传

浪子不回头ぞ 提交于 2019-12-06 13:47:09
接上篇文章 java 超大文件分片上传 在其基础上继续实现 断点续传和文件秒传功能 在上篇中,我们可以使用 file. slice 方法对文件进行分片,可以从后台读到当前文件已经上传的大小,就可以知道从哪里开始切片,断点续传的原理就是基于这个的。 前端计算文件的 md5 ,后台数据库查询一遍(前提是把 md5 存储了,计算文件 md5 也是需要消耗时间的)即可知道是否有相同文件,这是实现文件秒传的方法。 可能存在的问题: 有两个人同时在上传同一个文件,但前一个人还没有上传完成,此时第二个文件认为是新文件不能秒传 此时获取文件原数据时需要将文件信息保存起来,重点是要保存 md5 ,保证一个文件的 md5 保计算一次 获取断点文件时,真实的文件上传位置应该是从文件系统中读出来的 根据需求说明,后台应该存在四个接口,获取文件信息(包含是否可以秒传),获取断点文件列表,分片上传接口,文件完整性验证 全部源码位置 : https://gitee.com/sanri/example/tree/master/test-mvc /** * 加载断点文件列表 * @return */ @GetMapping("/breakPointFiles") public List<FileInfoPo> breakPointFiles(){ List<FileInfoPo> fileInfoPos =

Android-断点续传下载

陌路散爱 提交于 2019-12-04 13:54:42
工作找完了,玩也玩完了,该好好学习了,最近我把《Java并发编程的艺术》这本书给读完了,对于并发编程以及线程池的使用还是不娴熟,我就在imooc上找到一个项目“ Android-Service系列之断点续传下载 “,这是我对这个项目在编写的时候记录。 涉及知识点 UI界面编写 数据库 Service 广播传递数据 多线程以及Handler 网络 这些应该是Android的基础,我就不累述了,到时候在代码中遇到了再进行解释。 这个项目主要的流程是: 一切的操作的开始是基于Activity的,但是我们的下载任务肯定是不能在Activity中进行的,因为假如我们的Activity切换成后台进程就有可能会被销毁(进程的优先级:前台,可见,服务,后台,空),所以我们将下载放在Service中是比较好的,但是Service和Activity一样是主线程,是不能进行数据的操作的,所以我们要利用到Thread或者是线程池,如果我们要可见下载进度的话,我们就需要通过广播的消息传递来更新UI上的进度,对于断点我们就需要实时将下载到的文件位置存储下来,所以我们利用数据库(稳定)存储进度。下载完成以后再将下载信息删除。 基础布局 这部分就不讲了,特别简单的一个布局 <?xml version="1.0" encoding="utf-8"?> < RelativeLayout xmlns: android

外网大文件传输断点续传源码

馋奶兔 提交于 2019-12-04 08:42:28
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步: 前端修改 由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify文件上传组件,在项目使用的jslib项目中找到了BJUI框架集成jQuery Uploadify的部分,这部分代码封装在bjui-all.js文件中, 在bjui-all.js文件中的全局变量定义中有以下部分代码,这就是定义的有关于上传的Uploadify控件的重要变量: upload:{uploadLimit:5,fileSizeLimit:31744,removeTimeout:0.8} 以上三个变量代表的含义是: uploadLimit :表示上传文件个数的限制,5表示文件上传个数限制是5个 fileSizeLimit :表示上传文件大小的限制,31744单位是KB,也就是表示31M removeTimeout :表示移除文件的时间限制 继续查找使用到这些变量的地方,看到了文件大小超出限制等 了解了BJUI前端框架对于上传大文件的限制,可以这样使用,增大文件上传大小和数量,可以按照如下进行修改,我们在bjui-all

php大文件传输断点续传源码

北城以北 提交于 2019-12-04 08:18:58
1. 使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现 ( http://pecl.php.net/package/apc ) APC 实现方法: 安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明 配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明 代码范例: 大文件(50G)上传的实现细节: 服务端接收文件数据的处理逻辑代码: 2. 使用PECL扩展模块uploadprogress实现 ( http://pecl.php.net/package/uploadprogress ) uploadprogress 模块实现方法: 使用PECL模块安装方法安装该模块 php.ini 里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt” 代码范例: 进度的处理逻辑比较简单,只是更新数据库中的数据就行了。不需要做其它的处理。 客户端代码如下: 服务端代码如下: 实现后的效果: 强大的文件夹上传,能够轻松支持10W级别的文件夹上传。 速度还不错 文件支持续传,支持刷新浏览器,关闭浏览器,重启电脑之后仍然能够续传。 可以参考这篇文章: http://blog.ncmem.com/wordpress

jsp大文件传输断点续传源码

*爱你&永不变心* 提交于 2019-12-04 08:12:02
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 public class FileInf { public FileInf(){} public String id = "" ; public String pid = "" ; public String pidRoot = "" ; /** * 表示当前项是否是一个文件夹项。 */ public boolean fdTask = false ; // /// 是否是文件夹中的子文件 /// </summary> public boolean fdChild = false ; /** * 用户ID。与第三方系统整合使用。 */ public int uid =0; /** * 文件在本地电脑中的名称 */ public String nameLoc = "" ; /** * 文件在服务器中的名称。 */ public String nameSvr = "" ; /** * 文件在本地电脑中的完整路径。示例:D:\Soft\QQ2012.exe */ public String pathLoc = ""

前端大文件传输断点续传源码

一曲冷凌霜 提交于 2019-12-04 08:07:07
核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。 * 如何分片; * 如何合成一个文件; * 中断了从哪个分片开始。 如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块的轮子,虽然程序员的天性曾迫使我重新造轮子。但是因为时间的关系还有工作的关系,我只能罢休了。最后我选择了百度的WebUploader来实现前端所需。 如何合,在合之前,我们还得先解决一个问题,我们如何区分分块所属那个文件的。刚开始的时候,我是采用了前端生成了唯一uuid来做文件的标志,在每个分片请求上带上。不过后来在做秒传的时候我放弃了,采用了Md5来维护分块和文件关系。 在服务端合并文件,和记录分块的问题,在这方面其实行业已经给了很好的解决方案了。参考迅雷,你会发现,每次下载中的时候,都会有两个文件,一个文件主体,另外一个就是文件临时文件,临时文件存储着每个分块对应字节位的状态。 这些都是需要前后端密切联系才能做好,前端需要根据固定大小对文件进行分片,并且请求中要带上分片序号和大小。前端发送请求顺利到达后台后,服务器只需要按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件即可。 为了便于开发,我 将服务端的业务逻辑进行了如下划分,分成初始化