`
zy116494718
  • 浏览: 470917 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

视频库之断点下载

    博客分类:
  • Java
 
阅读更多

断点续传主要是使用http协议中range的属性来取得资源的部分内容,由于一般服务是不对外直接提供url访问的,一般都是通过id,在servlet中输出byte[]来实现,所以要想实现断点续传一般要自己实现一个服务端。

一个简单实现:
服务端:主要是分析了range属性,利用RandomAccessFile读取内容输出字节流

    public class Download extends HttpServlet {  
      
        @Override  
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
                throws ServletException, IOException {  
      
            int id = Integer.parseInt(req.getParameter("id"));  
            String filename ;  
            if (id == 1)  
                filename = "E:/JDK_API_1_5_zh_CN.CHM";  
            else if (id == 2)  
                filename = "E;/JDK_API_1_6_zh_CN.CHM";  
            else if (id == 3)  
                filename = "E:/apache-tomcat-5.5.26/webapps/ROOT/tomcat.gif";  
            else  
                filename = "c.rar";  
      
            RandomAccessFile raFile = new RandomAccessFile(filename, "r");  
              
            String range = req.getHeader("RANGE");  
            int start=0, end=0;  
            if(null!=range && range.startsWith("bytes=")){  
                String[] values =range.split("=")[1].split("-");  
                start = Integer.parseInt(values[0]);  
                end = Integer.parseInt(values[1]);  
            }  
            int requestSize=0;  
            if(end!=0 && end > start){  
                requestSize = end - start + 1;  
                resp.addHeader("content-length", ""+(requestSize));  
            } else {  
                requestSize = Integer.MAX_VALUE;  
            }  
              
            byte[] buffer = new byte[4096];  
              
            resp.setContentType("application/x-download");  
            resp.addHeader("Content-Disposition", "attachment;filename=a.chm");  
            ServletOutputStream os = resp.getOutputStream();  
              
            int needSize = requestSize;  
              
            raFile.seek(start);  
            while(needSize > 0){  
                int len = raFile.read(buffer);  
                if(needSize < buffer.length){  
                    os.write(buffer,0,needSize);  
                } else {  
                    os.write(buffer,0,len);  
                    if(len < buffer.length){  
                        break;  
                    }  
                }  
                needSize -= buffer.length;  
            }  
                  
            raFile.close();  
            os.close();  
        }  
    }  
 



客户端:分两次取得部分内容,输出到RandomAccessFile中

 
    public static void main(String[] args) throws MalformedURLException, FileNotFoundException {  
            test1(0,1000);  
            test1(1001,0);  
        }  
          
        public static void test1(int start, int end) throws MalformedURLException, FileNotFoundException{  
              
            String endpoint = "http://localhost:8080/Hello/download?id=1";  
              
            RandomAccessFile raFile = new RandomAccessFile("E:/temp/test.chm", "rw");  
              
            URL url = new URL(endpoint);  
            try {  
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
                //conn.addRequestProperty("location", "/tomcat.gif");  
                conn.setRequestProperty("Content-Type","text/html; charset=UTF-8");   
                conn.setRequestProperty("RANGE","bytes="+start+"-"+end);   
                  
                conn.connect();  
                System.out.println(conn.getResponseCode());  
                System.out.println(conn.getContentLength());  
                System.out.println(conn.getContentType());  
                  
                InputStream ins = (InputStream)conn.getContent();  
                  
                raFile.seek(start);  
                  
                byte[] buffer = new byte[4096];  
                int len = -1;  
                while((len = ins.read(buffer))!=-1){  
                    raFile.write(buffer,0,len);  
                }  
                raFile.close();  
                conn.disconnect();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  

 

接下来的工作:实现客户端的并发,多线程,即多个下载任务同时进行,连接的复用,实现暂停,显示进度条,下载完成的事件处理等,不涉及具体业务,搭建整个架构。

分享到:
评论

相关推荐

    zemax中文视频教学课程——百度云盘资源

    zemax中文视频教学课程内容简介如下: (1) Zemax功能模块探究 (2) Zemax默认评价函数设定规则 (3) Zemax优化操作数详解 (4) Zemax设计实例:单透镜优化设计 (5) Zemax设计实例:双胶合透镜优化设计 (6) Zemax玻璃库...

    毕设&课设&项目&实训-基于JavaCV库实现Android端的音视频录制.zip

    毕设&课设&项目&实训-基于JavaCV库实现Android端的音视频录制,支持断点录制、片段回删、定点聚焦、闪光灯、摄像头切换和视频水印等。 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息...

    因为网速太慢, 将打开摄像头拍的照放到canvas, 将canvas中的图片通过断点续传上传到服务器

    在谷歌浏览器中,通过包内的js库文件,打开浏览器摄像头,然后将摄像头的一张图片保存到本地,或者通过另一个js库文件传到服务端,该文件采用了断点续传方式,将待上传的图片通过分片为多个base64片段的方式传到后端...

    易语言宝库 v1.71.zip

    易语言宝库是一款免费的易语言资源下载工具,有大量教程、源码、支持库、编程常用工具等,宝库中的视频教程支持在线高清观看,并且可下载视频中的相关资源,支持多功能的搜索资源。 易语言宝库功能 一.易语言宝库...

    咏叹调:下载可以很简单

    支持多文件打包下载,多文件共享同一进度(如:视频+封面+字幕) 支持下载FTP文件夹 支持HTTP表单上传 支持文件FTP断点续传上传 支持FTPS断点续传, 支持SFTP断点续传, , 支持https地址下载在配置文件中很容易就...

    横瓜HTTP服务器 v3.6

    同时支持断点续传下载、迅雷下载、快车下载、IE浏览器HTTP下载等,在负载均衡方面,将迅雷快车等软件的风暴下载技术斩断成普通HTTP下载,实现了全体资源文件公平公正均衡下载的目标,提高了并发数。单个被下载文件...

    vc++ 开发实例源码包

    2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传). 3:可以在不下载ZIP.RAR.ISO文件的情况下查看文件里面的目录文件. 4:支持多语言. 5:操作综合其它软件. 6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接...

    易语言Ebaoku1.71

    ·下载引擎支持断点续传。 ·使用下载引擎,将会自动分析下载地址进行下载。 2.打开下载网页手动下载。 ·若提示资源“下载页面是不能打开”的,则需要使用下载引擎来下载。 三、资源信息 1.最近...

    vc++ 应用源码包_15

    大型多媒体视频会议服务器端和客户端源码VC.zip 带加密功能的SQLite3.3.6封装类 .rar 点对点多线程断点续传软件《传圣》源代码.rar 断点续下.zip 多个VC++加密解密算法库(CRYPT++).zip 多任务多线程断点续传DLL....

    7k7k.com 数据采集

    本人是原作者 技术支持:芒果の冰 ... http://www.7k7k.com/ 采集...因为本人不会做断点续传。请大家多多指教 请在采集的时候获得对方许可预授权。与此发生的法律纠纷本人概不负责。本人只是提供技术性代码供大家学习~

    HTML5 视频(videos)缩放JavaScript插件

    video-resize是一款可以对HTML5 视频(videos)进行缩放的JavaScript插件。插件中设置了不同的响应式断点,并通过插入样式表的方式来修改HTML5视频的显示尺寸。

    皮皮PHP视频系统 1.0 beta2.rar

    增加采集资源库断点续采功能 修复采集资源库后没有返回菜单的链接 修复采集资源库不能伪原创的BUG 修复播放地址过长不能正确入库的bug(名侦探柯南 有 500多集 全部加不上去) 修复无来路时的错误提示不跳转bug...

    Fiddler抓包工具基础学习视频.zip

    18断点应用 19弱网测试 20 20-Fiddler系列课--设置Fiddler捕获HTTPS流量 21-Fiddler系列课-设置Fiddler捕获Firefox HTTPS流量 22-Fiddler系列课--Android APP抓包详解 23-iOS APP抓包详解 24-Willow....

    android开发资料大全

    在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 ...

    反编译开源影视视频APP源码 绿豆影视对接苹果CMS 支持多功能自定义DIY页面布局

    新版绿豆视频APP视频6.1插件版反编译指南及教程 后端插件开源,可直接反编译修改方便,免授权 对接苹果CMS,自定义DIY页面布局! 绿豆影视APP对接苹果cms 所有页面皆可通过后端自由定制 ...支持首页断点续看

    PHPvod视频点播系统 2.6 for php5.2.x utf-8.rar

    并支持断点采集、同名影片自动追加播放组、自动下载海报、一键更新连载影片、html标签过滤、批量替换未知栏目与地区等功能。相对于传统资源库模式,具有采集灵活、数据更新及时等特点。 插件扩展十分灵活简单,上传...

Global site tag (gtag.js) - Google Analytics