断点续传实现

栗子~~ 栗子~~     2022-12-04     436

关键词:

断点续传实现:

简单来说应该分为两个角度来看待:

1、将要续传的文件

2、续传的文件

一、将要续传的文件

先说说将要续传的文件,既然是续传,那么肯定要有个标识,举例说明一下:

    事先准备一个文件,大小是1852字节,第一次读取该文件的io流(0-1024字节),并将1024作为下次读取的首值,存储1024这个变量,就是在这个过程中的标识(记录所读到的位置) ,通过这个标识,我们下次读取的字节范围应该就是(1024-1852)字节。

   要完成这个需求,应该考虑二个角度,

   1)、这个标识放在那里,(我之后举得列子是放在持久化map[ConcurrentHashMap])

   2)、既然是续传,那么肯定需要一个结束的状态的标识,来告诉续传的文件,我已经执行完了。

   下面是关键代码:

    (1),ConcurrentHashMap

     ConcurrentHashMap的优点:

    ConcurrentHashMap允许一边更新、一边遍历,也就是说在Iterator对象遍历的时候,

    ConcurrentHashMap也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,也就是说在Iterator对象遍历的时候,ConcurrentHashMap也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化。

    简单来说:它只对put,remove操作使用了同步操作,get操作并不影响

    代码如下:

package ga.gaapi.config;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class ZjHashMap 
    static Map<String,Long> conMap = new ConcurrentHashMap<>();
    //新增
    public static void addMap(String key,Long value)
        conMap.put(key,value);
    
    //删除
    public  static void delect(String key)
        conMap.remove(key);
    

    //获取
    public static  Long get(String key)
        return  conMap.get(key);
    


(2)、读取文件部分核心代码:

path :路径,

fileName:文件名。

try    

    File file = new File(path+"\\\\"+fileName);
    RandomAccessFile raf = new RandomAccessFile(file,"r");
    long count = file.length();
    byte[] read = new byte[Integer.parseInt(size)];
    int len =0;
    long fy = 0;
    long flag = 1;

     //判断标识中是否有值,有值的话,作为读取的首值
     if (null!= ZjHashMap.get(fileName))
        raf.seek(ZjHashMap.get(fileName));
        //计算要分页的数量,用来判断是否已经全部读取
        fy = PostUtils.fy(count-ZjHashMap.get(fileName), Long.parseLong(size));
     else
        //计算要分页的数量,用来判断是否已经全部读取
        fy = PostUtils.fy(count, Long.parseLong(size));
     
          while((len=raf.read(read))!=-1)
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            outputStream.write(read,0,len);
            outputStream.flush();
            //读取的字节
            byte[] bytes = outputStream.toByteArray();

            //把字节数发送给续传文件方

            //当前字节数目
            ZjHashMap.addMap(fileName,raf.getFilePointer());
              if (flag == fy)
                 //表示已到结尾,可以将这部分逻辑发送给续传文件方,告诉它已续传完毕
              
            flag ++;
            outputStream.close();
         
     raf.close();
     ZjHashMap.delect(fileName);

catch (Exception e)

           

、续传的文件

续传的文件就好说了,只要给一个续传的标识位置,和对应的字节流就可以了,代码如下:

filePath:生成的文件,用来续传用

content:将要写入的字节

position:续传的字节位置

 RandomAccessFile raf = null;
        try 
            raf = new RandomAccessFile(filePath, "rw"); //将随机存取文件流连接到文件,访问方式设置为可读可写
            raf.seek(position); //指定插入的位置
            raf.write(content); //插入指定内容
         catch (IOException e) 
            e.printStackTrace();
         finally 
            //关闭随机存取文件流
            try 
                raf.close();
             catch (IOException e) 
                e.printStackTrace();
            
        

前端实现文件的断点续传

早就听说过断点续传这种东西,前端也可以实现一下断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解其大致的... 查看详情

断点续传

早就听说过断点续传这种东西,前端也可以实现一下断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的本文通过断点续传的简单例子(前端文件提交+后端PHP文件接收),理解其大致的... 查看详情

断点续传实现

断点续传实现:简单来说应该分为两个角度来看待:1、将要续传的文件2、续传的文件一、将要续传的文件先说说将要续传的文件,既然是续传,那么肯定要有个标识,举例说明一下:  事先准备一个文件,大小是1852... 查看详情

断点续传下载原理实现

...览器显示下载进度动态创建的文件希望能够分段下载HTTP断点续传报文要实现HTTP断点续传必须要简单了解以下几个报文。Accept-Ranges告诉客户端(浏览器..)服务器端支持断点续传 服务器端返回Range客户端告诉服务器端从指定的的... 查看详情

文件下载之断点续传(客户端与服务端的实现)

【转】文件下载之断点续传(客户端与服务端的实现)【转】文件下载之断点续传(客户端与服务端的实现)前面讲了文件的上传,今天来聊聊文件的下载。老规矩,还是从最简单粗暴的开始。那么多简单算简单?多粗暴算粗暴... 查看详情

java实现文件的断点续传

java实现文件的断点续传:依赖:<!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version></dep 查看详情

断点续传

--实现断点续传http://www.cnblogs.com/peaceli/archive/2011/04/06/breakpoint_upload.html  查看详情

winform实现断点续传的思路及代码

...tp://fex.baidu.com/webuploader/getting-started.html工作中需要使用到断点续传,找了好多篇博客,最后的时候在csdn上找到一个项目(文末有链接)。把他的代码拆出来使用了。 虽然不同的断点续传实现可能不同,不过思路应该都是相... 查看详情

用asynctask实现断点续传

...组件之一的service时,正好可以利用asyncTask和OKhttp来进行断点续传,并在手机的前台显示下载进度。    尝试下载的是Oracle官网上的jdk1.7    在AS中使用OKhttp,只需要简单的在app/build.gradle里加入一句就... 查看详情

rsync实现断点续传(代码片段)

...比较悲剧了。这时候可以考虑使用rsync命令替代scp,实现断点续传文件。试验:rsync使用环境:2台RHEL5.7需求:主机A传送文件夹TestDB到主机Brsync-rP--rsh=ssh/home/oracle/TestDB/[email protected]192.168.1.1 查看详情

基于http的文件断点续传实现(代码片段)

基于Http的文件断点续传实现1:断点续传的介绍客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如... 查看详情

前端js实现文件的断点续传后端php文件接收

http://www.jb51.net/article/94732.htm 查看详情

java实现的断点续传功能

代码中已经加入了注释,需要的朋友可以直接参考代码中的注释。下面直接上功能实现的主要代码: importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.io.RandomAccessFile;importjava.n 查看详情

afnetworking实现程序重新启动时的断点续传(代码片段)

今天需要用AFNetworking实现断点续传的功能,但是在进行了一番研究之后,发现AFNetworking虽然支持下载文件的暂停和继续,但是程序重新启动后再次下载无法进行续传。网上有说可以通过AFDownloadRequestOperation这个AFNetworki... 查看详情

java实现文件的断点续传

​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。第一步:前端修改由于项目使用的是BJUI前端框架,并... 查看详情

文件下载之断点续传(客户端与服务端的实现)

...载其他方式文件下载文件下载-客户端直接下载异步下载断点续传断点续传(服务端的支持)多线程同时下载(分片下载)前面讲了文件的上传,今天来聊聊文件的下载。老规矩,还是从最简单粗暴的 查看详情

用c实现断点续传的功能,详细点的实现原理是啥嘞

参考技术A用C实现断点续传的功能,详细点的实现原理是什么嘞于HTTP协议的多执行绪下载和断点续传的实现学生:叶升路指导教师:覃颖(三峡大学电气资讯学院)摘要:本文介绍了网路下载软体中的最新技术——多执行绪下载... 查看详情

如何用xmlhttprequest实现大文件上传和断点续传

参考技术AH5支持XMLHttpRequest对象,能够实现断店续传。我说一下我的思路吧:首先获取文件的MD5(spark-md5.js),然后利用文件对象的slice方法进行切割文件,分段上传到后台,后台组装文件然后校验MD5值;我也刚好在做,觉得可... 查看详情