java实现文件续传

Java实现文件的断点续传(HTTP) java实现文件断点续传 立即下载

原文出自搬砖工,需要转载请注明出处。



        这里给出java实现简单的文件续传的核心代码

        文件存放服务器的代码实现,主要就是想某个文件读出然后传输出去。当然,文件续传肯定是要跳过已下载字节,seek函数就是用来跳过字节的。RandomAccessFile是随机读取文件的类,即支持从某个点开始读取。

public void downloadFileRanges(File downloadFile,RequestContext request,
			ResponseContext response)throws Exception{
		// 要下载的文件大小
		long fileLength = downloadFile.length();
		// 已下载的文件大小
		long pastLength = 0;
		RandomAccessFile raf = null;
		OutputStream os = null;
		OutputStream outPut = null;
		byte b[] = new byte[1024];

		String startRange = request.getHeader("startRange");
		if(!StringUtil.isEmpty(startRange)){//断点存在时
			pastLength = Long.parseLong(startRange);
		}
		String fileName = getDownloadChineseFileName(downloadFile.getName());
		response.setHeader("Content-Disposition",
				"attachment;filename=" + fileName + "");
		// 响应的格式是:
		response.setContentType("application/octet-stream");
		response.addHeader("Content-Length", String.valueOf(fileLength));
		String md5 =FileMd5.getMD5(downloadFile);
		response.setHeader("md5", md5);
		try{
			os = response.getOutputStream();
			outPut = new BufferedOutputStream(os);
			raf = new RandomAccessFile(downloadFile, "r");
			// 跳过已下载字节
			raf.seek(pastLength);

			int n = 0;
			while ((n = raf.read(b, 0, 1024)) != -1) {
				outPut.write(b, 0, n);
			}
			outPut.flush();
		}
		catch (IOException e){//忽略错误
		} 
		finally{
			if(outPut != null){ 
				outPut.close();
			}
			if(raf != null){
				raf.close();
			}
		}
	}

/**
	 * 获取中文名
	 * @param paramName 
	 * @return
	 */
	private String getDownloadChineseFileName(String paramName) {
		String downloadChineseFileName = "";
		try{
			downloadChineseFileName = new String(paramName.getBytes("GBK"),
					"ISO8859-1");
		}
		catch (UnsupportedEncodingException e){
			e.printStackTrace();
		}
		return downloadChineseFileName;
	}
文件下载端核心代码实现,当FileOutputStream设置为true的时候就是从原有文件的地方开始叠加数据。达到续传的目的

public void doDownload(String httpUrl,String saveFileName,String saveFilePath,
			String tarfilename,String tarfilepath,boolean isRange) throws IOException{
		long bytesum = 0;  
		int byteread = 0;
		long bytetotal = 0;
		long size = 0;
		FileOutputStream fs = null;

		String saveFile = saveFilePath+"/"+saveFileName;//saveFilePath文件夹需要存在
		File f = new File(saveFile);
		URL realUrl = new URL(httpUrl); 
		URLConnection conn = realUrl.openConnection();//打开连接
		//设置参数
		if(isRange){//续传则传递开始节点
			size = f.length();
			conn.addRequestProperty("startRange", String.valueOf(size));
		}
		conn.addRequestProperty("filename", tarfilename);
		conn.addRequestProperty("filepath", tarfilepath);

		conn.connect();//建立连接
		InputStream inStream = conn.getInputStream(); 
		String error = conn.getHeaderField("error");
		String MD5 = conn.getHeaderField("MD5");
		if(error!=null){
			return error;
		}
		if(size==0){
			fs = new FileOutputStream(saveFile); 
		}else{
			fs = new FileOutputStream(saveFile,true);  
		}

		bytetotal = conn.getContentLength();
		byte[] buffer = new byte[1024];
		while ((byteread = inStream.read(buffer)) != -1) {  
			bytesum += byteread;//这里可以计算进度
			fs.write(buffer, 0, byteread); 
		}
		fs.close();
	}

当然,续传的过程就是把下载文件已经下载多少传递给文件服务器方,然后文件服务器提供文件流的时候跳过那些字节。然后文件流接受的时候采用叠加方式向文件中写数据。当然为了保证文件的完整性,可以进行文件大小和MD5校验。

用Java实现断点续传(HTTP) NULL 博文链接:https://liaobuzhisi.iteye.com/blog/1124359 立即下载

相关推荐

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

主要以实例的方式为大家详细介绍了简单的Java断点续传实现原理,感兴趣的小伙伴们可以参考一下

Java-断点续传 【文件分块】

引用百度百科:对断点续传的定义个人理解:如果我们要在项目的媒资管理部分,上传视频文件(通常这类视频文件都比较大),http协议本身对上传文件大小没有限制,但是客户的网络环境质量,电脑硬件环境参差不齐,可能会导致一个大文件快上传完了出现断网的情况,从而导致文件没有上传成功,需要客户重新上传,用户体验非常差,所以对于大文件上传的要求是能做到断点续传1.前端上传完先把文件分成块2.一块一块的上传,上传中断后重新上传,已上传的分块则不用再上传3.各分块上传完成最后在服务端合并文件。

2301_79757798的博客 1801

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

信道估计,就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。需强调的是信道估计是信道对输入信号影响的一种数学表示,而“好”的信道估计则是使得某种估计误差最小化的估计算法。本文主要讲述非盲信道估计中的LS估计和MMSE估计。LS全称为,即估计的信道参数与实际信道参数的差,进行平方求和后得到的误差累积最小。MMSE估计是LS估计的改进,在LS估计的最终结果的基础上乘以加权矩阵,使之与实际信道参数更为接近。

taiyuezyh的博客 1万+

Java断点续传和文件切片(一文带你看懂,有代码示例)

5.切片完成后,每个文件块可以单独处理、传输或存储,也可以通过反向操作进行合并,恢复原始的大文件。6.文件切片常用于大文件的分布式存储、传输、备份等场景,可以实现更快的并行处理和更高的容错性。需要注意的是,文件切片也可能带来一些问题,例如切片后的文件数量与管理、传输的复杂性等,需。1.文件切片的目的是将一个大文件分割成多个小文件,每个小文件称为一个文件块或片段。、接收端合并文件块:接收端根据接收到的文件块,按照顺序将它们合并成完整的大文件。、划分文件块:按照预设的大小,将待传输的文件切割成多个小文件块。

m0_63233901的博客 1814

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

Simulink中便于搭建各类动力学与控制模型,通过将原有的控制器替换为AI控制器,可以方便使用已有模型,提供增量效果。 本节的重点是如何引入Simulink模型作为env,其他的内容在之前的文章中已有说明。 以水箱模型watertank为例,如下图所示: 采用PI控制器,控制效果如下所示: 将此PI控制器替换为神经网络控制器后,系统架构如下图所示: 具体替换策略如下所示: (1)删去PID控制器; (2)增加RL Agent模块; (3)观测器模块: 观测向量为:,其中...

bear_miao的博客 1万+

Java文件断点续传

断点续传实现思路:将大文件均分成几块后,每个线程分别处理一块数据的读取和写入。每次写入都要更新记录的日志文件,断网或暂定后重新开始传输时,根据日志文件的信息,可以接着读取写入数据,不用重头开始传输。

iteye_9939的博客 3203

基于强化学习的工业SCR脱硝系统控制算法设计与实现

本文提出了一种基于强化学习的工业SCR脱硝系统智能控制方法。针对SCR系统存在的非线性、大滞后和多变量耦合等控制难点,研究采用混合建模方法构建了精度在5%以内的系统模型,并设计了专门的强化学习环境。该方法通过定义合理的动作空间和状态空间,结合物理约束设计损失函数,利用深度强化学习算法优化氨喷射控制策略。相比传统PID控制,该智能控制器能更好地适应烟气参数波动,实现NOx排放的稳定控制,为工业环保设施提供了更优的自动化解决方案。

huanghm88的专栏 1456

java超大文件上传和断点续传的实现

停止\。停止

weixin_45525177的博客 596

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

别再手动抄表了!用MCGS触摸屏自动存数据到U盘,5分钟搞定报表导出

本文详细介绍了如何利用MCGS触摸屏实现工业数据自动记录与U盘导出,彻底告别传统手动抄表方式。通过昆仑通态MCGS系统,可构建零误差自动化报表系统,实现实时数据采集、双重备份及标准CSV格式导出,大幅提升数据准确性和工作效率。

weixin_30872157的博客 793

java解决大文件断点续传

需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制。PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W。支持大文件断点续传,要求刷新浏览器,重启浏览器,重启电脑后仍然能够继续上传。文件大小要求能够支持到20个G。支持自动加载本地文件,要求能够自动加载指定的本地文件。...

weixin_52041354的博客 853

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 303

JAVA开源代码分享:如何实现大文件的秒传与续传?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

weixin_52050572的博客 1044

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3101

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JAVA Web开发中,如何实现大文件的秒传与续传?

2025年3月的北京仍带着料峭寒意,军工研究院的会议室里却气氛灼热。大屏幕上跳动着红色警示:“政府单位100G涉密文件传输需求——现有系统兼容性评估:0%”。作为项目总工,我盯着这个刺眼的数字,指尖无意识地摩挲着茶杯边缘。"传统方案最多支持20G文件传输。"技术总监老张推了推眼镜,"而且我们的JSP框架是十年前基于Struts2搭建的,要兼容现代前端分片上传…"他的话被窗外突然响起的防空警报打断,这声音像一记重锤敲在每个人心头——我们正在守护的,是关乎国家安全的机密数据。

2501_90646763的博客 992

计算机控制技术及应用

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

Java后端配合Vue前端,如何实现大文件上传的刷新续传?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

2501_90646763的博客 822

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JAVA大文件上传中的秒传与续传功能如何实现?

大文件传输:支持单文件100GB级别传输文件夹结构保留:完整保留上传/下载的文件夹层级结构高稳定性断点续传:支持浏览器刷新/关闭后不丢失进度加密传输存储:支持SM4、AES算法,可配置非打包下载:避免服务器内存问题广泛兼容性:支持多操作系统、多浏览器(含IE8)系统集成:兼容现有JSP/Vue技术栈和MySQL数据库此方案全面考虑了贵公司对大文件传输系统的各项需求,特别针对文件夹结构保留、高稳定性断点续传、加密传输等核心功能进行了深度设计。

weixin_52050572的博客 894

Java组件能否实现大文件上传的秒传与续传?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

2501_90699850的博客 681

JSP页面如何集成JAVA实现大文件的秒传与续传?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

2501_90699800的博客 922

医疗系统中,Java如何实现HTTP大文件的秒传与续传功能?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

2501_90699640的博客 1036

Java大文件分片上传如何实现秒传与续传功能?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

2501_90646763的博客 874

如何用JAVA实现网页上的大文件秒传与续传?

作为北京XX软件公司的项目负责人,近期产品部门提出了大文件传输系统的需求。

2501_90646763的博客 676

国企项目里,JAVA如何实现大文件的分块上传与续传?

Mermaid 渲染失败: Parse error on line 2:... A[客户端] --> B[网关层(Nginx+Lua)] B -

2501_90646763的博客 478

Java在金融领域实现大文件上传下载的加密与续传?

要求:开源,免费,技术支持技术:分片,分块,断点续传,加密传输,加密存储需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,springboot,struts服务器:linux,信创国产化数据库:mysql,oracle,达梦,国产化数据库。

alisky119的博客 471

JAVA大文件分片上传过程中如何实现续传和断点续传?

求各位大佬加群。

2501_90646763的博客 946
上一篇: java执行cmd命令工具实现
下一篇: 怎么解决java.lang.NoClassDefFoundError错误
海之沐
博客等级 码龄12年 1536粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值