断点续传,听上去似乎是个比较高级的话题,本文只讲述一下http版的断点续传,其他协议的大家可以自行研究。
http协议中,服务端实现断点续传首先需要读取客户端传送的Range头信息,比如“Range: bytes=12583394-”这个就是指原来正在下载的文件需要从第12583394字节继续下载,然后我们利用java.io.File的skip方法,舍弃掉原文件的前n个字节,接着就继续慢慢write吧。。。
但是客户端又是如何判断服务端是否支持断点续传的呢?主要就是Accept-Ranges和Content-Length头信息。比如“Accept-Ranges:bytes”和“Content-Length:99999999”。有了这两个头信息,客户端就认为服务端是支持断点续传的了。
然后需要注意的是,假如客户端刚才由于某些原因,暂停了下载,现在恢复的时候,就会如前所述,传来Range头信息,这时候,我们的response就需要设置一下状态码,这里应该设置成206(详细解释请看http://en.wikipedia.org/wiki/List_of_HTTP_status_codes),还有就是Content-Range头信息,格式为“bytes x-(y-1)/y”,x就是客户端传来的开始字节位置,y就是文件长度。
(以上转自:http://blog.csdn.net/xiaoxiaoxuewen/article/details/7701170)
实例代码如下:
/** * 下载服务器已存在的文件 * * @param request * @param response * @param proposeFile * @throws IOException * @throws FileNotFoundException */ private void downloadExistsFile(HttpServletRequest request, HttpServletResponse response, File proposeFile) throws IOException, FileNotFoundException { log.debug("下载文件路径:" + proposeFile.getPath()); long fSize = proposeFile.length(); // 下载 response.setContentType("application/x-download"); String isoFileName = this .encodeFilename(proposeFile.getName(), request); response.setHeader("Accept-Ranges", "bytes"); response.setHeader("Content-Length", String.valueOf(fSize)); response.setHeader("Content-Disposition", "attachment; filename=" + isoFileName); long pos = 0; if (null != request.getHeader("Range")) { // 断点续传 response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); try { pos = Long.parseLong(request.getHeader("Range").replaceAll( "bytes=", "").replaceAll("-", "")); } catch (NumberFormatException e) { log.error(request.getHeader("Range") + " is not Number!"); pos = 0; } } ServletOutputStream out = response.getOutputStream(); BufferedOutputStream bufferOut = new BufferedOutputStream(out); InputStream inputStream = new FileInputStream(proposeFile); String contentRange = new StringBuffer("bytes ").append( new Long(pos).toString()).append("-").append( new Long(fSize - 1).toString()).append("/").append( new Long(fSize).toString()).toString(); response.setHeader("Content-Range", contentRange); log.debug("Content-Range", contentRange); inputStream.skip(pos); byte[] buffer = new byte[5 * 1024]; int length = 0; while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) { bufferOut.write(buffer, 0, length); } bufferOut.flush(); bufferOut.close(); out.close(); inputStream.close(); }
相关推荐
完整的java上传下载源码。包含两种实现方式:1.web端上传下载 2.java接口实现断点上传。绝对可用。研究了好久总结的代码。
前端Excel大文件file slice分片,md5校验文件完整性并作文件标识记录写入数据库,支持断点续传。文件上传完毕后,使用EasyExcel读取文件流,处理Excel数据写入数据库中,可处理百万级数据。项目完整,连接数据库即可...
首先执行根目录下的sql,然后在CloudSystem\WEB-INF\classes下在address.properties修改文件存法的路径(linux例如/usr/local,Window如E:\\temp1122) 然后在dbconfig下修改你的 数据库 连接,然后大功告成了!打开 ...
java web 网站,实现网页直接上传文件,强悍支持断点下载功能, 今天公司,做项目的时候突然客户需要,在页面实现上传文件,并且还得支持断点续传的功能,郁闷啊,只得花时间去弄了,一般现在网上说的都是用FTP的...
Net Core文件上传、断点续传-前端基于Web Uploader 支持通过input file跟流上传.zip
java开源项目分享-支持文件分片上传、断点续传、秒传、下载功能 本项目接口文档使用的是自定义的无侵入Swagger组件该组件已发布到中央仓库 开发环境:JDK8,SpringBoot2.x,MySQL5.5,web-uploader 开发工具:...
断点续传,springboot+webuploader +mysql 实现断点续传功能
MxsDoc是基于Web的文件管理系统,支持权限管理、历史版本管理、Office预览/编辑、WPS预览/编辑、在线解压缩、文件分享、文件加密、远程存储、远程文件推送、秒传、断点续传、智能搜索、文件备注、自动备份、一键迁移...
Breakpoint-continuingly-download-file 这是一个以Cocos2d-x c++ 断点续传功能下载文件的项目源码 This is a Cocos2d-x c++ source breakpoint continuingly functions…. 软件开发设计:应用软件开发、系统软件...
自测可以使用的 前台页面是H5请求页面(必须为H5页面),后台是JAVA写的,idea可直接导入项目运行,eclipse用户需要自行调整文件结构;...支持断点续传,后续会写多线程断点续传,资源仅供学习交流使用,欢迎留言评论,
Java程序由Java源代码编写,经过编译后生成Java字节码文件,然后在Java虚拟机上运行。 Java程序通常包括一个或多个类,每个类都包含了属性和方法。Java程序的入口点是一个特殊的类,它包含了一个名为main的方法,这...
文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp类库,对一些比较常见的功能如进度条、断点续传、内外网的映射、在Applet中回调JavaScript函数等问题进行详细的阐述及代码实现,希望通过...
本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
WEB、WAP手机浏览器,速度快而稳定,具有网站导航、搜索、下载、邮件、个人数据管理等功能,助您畅游网络世界!...人性化的下载支持大文件下载、断点续传,并采用了数据压缩传输技术,更能节省时间、金钱。
支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、本地自动备份、异地自动备份、一键迁移。...