java 断点续传

Java实现大文件断点续传技术 在实际应用中,我们经常会遇到需要上传大文件的场景。为了提高用户体验,我们可以使用断点续传技术来实现大文件的上传。本文将介绍如何使用Java实现大文件的断点续传功能。 阅读详情

原理:主要是使用HTTP协议中range属性来取得资源的部分内容,由于一般服务是不对外直接听过url访问的,一般都是通过ID,在servlet中输出byte[]来实现,所以要想实现蹲点续传一般要自己实现服务端和客户端,客户端保持文件的下载和上传文件状态,可以保存在本地或者数据库中。宰金鑫中断时保持中断状态,在进行续传时,首先读出文件的状态,然后设置range属性信息发送续传请求。服务器收到续传请求,读取range属性值,从文件中读取数据,发送到客户端。上传和下载的原理是一样的。

客户端:

/**
* 实现断点续传的客户端
* @author uj
*
*/
public class LoadClient {
     public static void load(int start, int end) throws Exception {
          String endpoint = "http://localhost:8080/RestDemo/LoadServlet?id=5";;;
          URL url = new URL(endpoint);

          HttpURLConnection connection = (HttpURLConnection) url.openConnection();
          connection.setRequestProperty("Content-Type", "text/plain;charset=UTF-8");
          connection.setRequestProperty("RANGE","bytes="+start+"-"+end);//在header中增加range属性
          connection.connect();

          System.out.println(connection.getResponseCode());
          System.out.println(connection.getContentLength());
          System.out.println(connection.getContentType());

          InputStream is = (InputStream) connection.getContent();
          String filename = connection.getHeaderField("Content-Disposition");
          filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");
          filename = filename.substring(filename.lastIndexOf("\\")+1);
          System.out.println(filename);

          RandomAccessFile raf = new RandomAccessFile("D:\\"+filename,"rw");
          raf.seek(start);

          byte[] buf = new byte[1024];
          int len = 0;
          while((len = is.read(buf))!=-1) {
              raf.write(buf,0,len);
          }
          raf.close();       
     }

     public static void main(String[] args) throws Exception {
//        load(0,1000); //下载前1000个字节的数据
          load(1001, 0); //下载剩余字节的数据
     }
}

服务端:需要使用JavaEE开发工具和Tomcat服务器环境

/**
* 断点下载的服务端
*/
@WebServlet("/LoadServlet")
public class LoadServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;


     /**
      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          int id = Integer.parseInt(request.getParameter("id"));
          System.out.println(request.getContextPath());
          String path = request.getServletContext().getRealPath("load");
          String filename = "";
          if(id == 1){
              filename = path+"1.jpg";              
          }else if(id == 2){
              filename = path+"2.jpg";
          }else  if(id == 3){
              filename = path+"3.jpg";
          }else{
               filename = path+"断点续传.txt";
          }

          RandomAccessFile raf = new RandomAccessFile(filename,"r");
          String range = request.getHeader("RANGE");
          int start = 0;
          int 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;
              response.addHeader("content-length", ""+(requestSize));
          }else{
              requestSize=Integer.MAX_VALUE;
          }

          byte[] buf = new byte[1024];
          response.setContentType("application/x-download");
          filename = new String(filename.getBytes("UTF-8"),"ISO8859-1");
          response.addHeader("Content-Disposition", "attachment;filename="+filename);
          ServletOutputStream os = response.getOutputStream();
          int needSize = requestSize;
          raf.seek(start);
          while(needSize > 0){
              int len = raf.read(buf);
              if(needSize<buf.length){
                   os.write(buf,0,needSize);
              }else{
                   os.write(buf,0,len);
                   if(len<buf.length){
                        break;
                   }
              }
              needSize -=buf.length;
          }

          raf.close();
          os.close();        

     }
     /**
      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doGet(request, response);
     }
}

这里写图片描述
其中文件:load断点续传.txt 文件要放在WebContent文件夹下

项目下载链接:http://download.youkuaiyun.com/download/studyofandroid/10249181

Java编程实现文件断点续传技术详解 HTTP请求头的定义和设置在多数现代Web开发框架中都得到了很好的支持。以Java中的HttpClient为例,可以通过以下方式定义和设置请求头:.build();在这个例子中,我们创建了一个带有两个请求头字段(”User-Agent”和”Accept”)的HTTP GET请求。这些字段向服务器提供了有关客户端请求的信息。Spring MVC是Spring框架的一个模块,它提供了一种基于Java的、可扩展的MVC(Model-View-Controller)实现,用于构建Web应用程序。 阅读详情

相关推荐

Triplet Loss调参实战:Margin选多少?距离函数用哪个?我的模型为什么训不动?

本文深入探讨了Triplet Loss调参中的关键问题,包括margin参数的选择、距离函数的比较以及模型训练不动的常见原因。通过实战案例和技术分析,提供了针对不同场景(如人脸识别、商品图像、文本匹配)的margin黄金区间,并对比了欧式距离与余弦相似度的适用场景。文章还介绍了困难样本挖掘的最新策略和模型诊断的实用清单,帮助开发者高效解决度量学习中的工程难题。

weixin_29050271的博客 410

java 实现断点续传服务

java 实现断点续传服务 一:什么是断点续传 客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载 (将文件分片以及后续合并是一个不小的工作量,由于项目时间有限,我并没有做分片,只是实现了可断点下载) 二:实现原理 2.1 实现思路 需要前端和后端的配合,前端在请求头中 标明 下载开始的位置,后端重标记位置开始向前端输出

qq_50990903的博客 8602

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 796

【java】【断点续传】----java实现大文件断点续传和分片上传原理和详细全过程

分片上传:将大文件切割为固定大小的分片,逐个上传,核心是文件MD5标识分片归属,临时目录存储分片。断点续传:上传前通过MD5查询已上传分片,只上传未完成的分片,依赖数据库记录分片状态。多文件适配:复用单文件的分片/断点逻辑,前端循环处理每个文件即可,后端无需额外开发。

朱朱博客,分享技术 994

MFC+Modbus-Tcp协议实现温湿度传感器采集

本文简单介绍MFC使用-Tcp通信实现系列MODBUSTCP型温湿度传感器采集数据。

zhigang_zhao的博客 2830

Shopee动态参数x-sap-Ri与x-sap-Sec逆向解析实战

现代电商前端反爬普遍采用动态参数校验机制,其核心是将设备指纹、DOM状态与时间上下文耦合生成不可复用的请求凭证。x-sap-Ri本质是渲染上下文唯一标识,依赖真实浏览器环境中的DOM树结构、Canvas像素指纹及毫秒级时间扰动;x-sap-Sec则是基于该标识与服务端同步密钥生成的HMAC-SHA256签名,具备强时效性与密钥轮换特性。这类机制显著提升了自动化采集门槛,广泛应用于Shopee商品详情页等高价值数据接口。本文聚焦于从Chrome DevTools调试出发,系统还原参数生成逻辑,覆盖DOM一致性

weixin_30603633的博客 893

Java-断点续传(分片上传)

什么是断点续传 用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传送,这样大大减少了用户的烦恼。 解决上传大文件服务器内存不够的问题 解决如果因为其他因素导致上传终止的问题,并且刷新浏览器后仍然能够续传,重启浏览器(关闭浏览器后再打开)仍然能够继续上传,重启电脑后仍然能够上传 检测上传过程中因网络波动导致文件出现了内容丢失那么需要自动检测并且从新上传 解决方案 前端 需要进行分割上传的文件 需要对上传的分片文件进

weixin_45203607的博客 7232

无刷电机控制基础(2)——有感和无感驱动、调速

上一篇文章我们讲了一些无刷电机的基础知识,包括无刷电机的内部结构,驱动原理等,我们知道了只需要按照转子的当前位置,来按顺序给定子线圈通电,就能让电机转动起来。但是,上一篇中我们跳过了一个关键步骤,就是如何检测转子的位置。本篇我们就讲讲常用的位置检测方法,以及引出的一些相关问题。我们知道,获取磁铁的位置可以用霍尔传感器,无刷电机的转子就是永磁体,因此只要在合适的位置安装霍尔传感器,就能知道转子的旋转位置。在无刷电机中,一般用3个开关型霍尔器件就能检测转子的位置。

小白白学电子 2万+

java断点续传 框架_java实现断点续传

用java的URL实现了一个简单的断点续传的列子,不为别的,假如你对断点续传不了解一看就明白了呵呵,算不上高深啊package test;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.RandomAccessFile;import j...

weixin_39547596的博客 534

【实验必备】对AffectNet数据集进行人脸对齐的小Demo

本文首先简单介绍了AffectNet数据集,及人脸关键点等背景知识,接着Po出了人脸对齐的代码及效果展示。注:本文代码参考自FG2021的Emotion-GCN的开源代码,具有一定的可靠性,欢迎大家学习!

信小海 2665

SAP S/4 HANA CO 成本模块实战指南

摘要:SAP S/4HANA CO(管理会计)模块是企业内部成本管理的核心工具。本文系统介绍了CO模块的组织结构(控制范围与会计科目表映射)、基础概念(计划值与预算值)以及6大子模块功能(成本要素、成本中心会计等)。重点解析了各子模块的应用场景与差异,包括成本归集、费用分摊、利润分析和产品成本控制,并对比了利润中心与成本中心、内部订单与销售订单的区别。通过事务代码示例和功能对比表,帮助用户快速掌握SAP CO模块的核心管理逻辑与实施要点。

金牌架构师 1125

java断点续传原理_很简单的Java断点续传实现原理

原理解析在开发当中,“断点续传”这种功能很实用和常见,听上去也是比较有“逼格”的感觉。所以通常我们都有兴趣去研究研究这种功能是如何实现的?以Java来说,网络上也能找到不少关于实现类似功能的资料。但是呢,大多数都是举个Demo然后贴出源码,真正对其实现原理有详细的说明很少。于是我们在最初接触的时候,很可能就是直接Crtl + C/V代码,然后捣鼓捣鼓,然而最终也能把效果弄出来。但初学时这样做其实很...

weixin_31938727的博客 2123

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

http断点续传java_java中http断点续传的原理

(一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, app...

weixin_42134094的博客 1548

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用Java实现断点续传

(一)断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, ap

rich1979的专栏 1371

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java断点续传

以下内容转载自作者LaterEqualsNever 原文链接:https://blog.youkuaiyun.com/ghost_Programmer/article/details/51923895 原理解析 在开发当中,“断点续传”这种功能很实用和常见,听上去也是比较有“逼格”的感觉。所以通常我们都有兴趣去研究研究这种功能是如何实现的? 以Java来说,网络上也能找到不少关...

likecandy的博客 3305

java 开源 断点续传_java实现断点续传.txt

用Java实现断点续传(HTTP)钟华2001 年 5 月(一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap,...

weixin_33933221的博客 1059

断点续传JAVA实现

断点续传JAVA实现 支持H5 Video标签播放,迅雷下载 /** * 断点续传工具 * @author lxycx_xc * 时间:2017年11月30日 */ public class BreakpointResume { private static Logger log = Logger.getLogger(...

w1366352655的博客 1040

java断点续传_用Java实现断点续传(HTTP)

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/v...

weixin_39796116的博客 1376

JAVA实现断点续传

断点续传的原理 其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, appli

Jerome Kwok网络日志 986

java断点续传

断点续传

m0_64043387的博客 3687

java http断点续传_Java如何实现HTTP断点续传功能

(一)断点续传的原理其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, app...

weixin_42514394的博客 1189

Java编写的断点续传的一个Demo示例

最近在研究Java的网络编程。在学习了基础知识和原理之后,觉得可以搞一个断点续传的Demo示例。分享记录一下。 涉及到的Java知识点:URL,HttpURLConnection,RandomAccessFile类,HTTP协议的基础知识。

frankingly的专栏 8095
上一篇: ArrayList源码浅析
下一篇: Android HandlerThread源码浅析
明天的增加
博客等级 码龄11年 22粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值