JAVA HTTP大文件断点续传上传

该说不说,最近这块挻火的。今天早上有网友加我微信,也是咨询这块的技术问题,最近不知道啥情况,加我的网友还是挻多的。实际上我的微信很早就在网上公开了,但是还是有很多网友说找不到。
昨天晚上论坛里面有位网友发私信给我,聊了一下这个问题,这个网友是一个自由职业者,他也是刚开始学习这块,很多技术都不是很了解,平时也对技术比较感兴趣,他最近接了一个项目,也是有这个需求,需要传大文件,主要难点在于大文件和文件夹的下载。我先花了1个小时左右的时间跟他讲解了一下基础知识,比如文件初始化,文件块处理,文件合并处理,然后又花了一个小时帮他搭建了一个开发和测试环境,最后又花了一个小时左右的时间帮他调试成功。
不吹不黑,这个是目前为止能够找到的开源免费解决方案里面做的最好的一个了,网上的免费的方案很多,但是能用的很少,好用的就更少了。网上开源的吧,没有技术支持,但是这个不仅提供技术支持,还提供了非常少见的在线实时技术支持,能够通过QQ群和微信与作者联系,除此之外还提供了在线教程,开发文档和视频教程。真的,有一说一这个作者做的真的很不错,这里要点赞。免费的方案里面我就从来没有见过哪一个提供视频教程。
包教会,免费帮助我们公司培训,免费教我们公司开发人员使用和维护,免费培训,免费提供视频教程,免费提供开发文档,完全免费开放产品源代码,源代码包含前端,后端,控件源代码,并且支持自主编译,自主开发,自主部署,完全满足企业100%自主安全可控需求。能够适配信创国产化环境,包含国产操作系统,国产CPU,国产数据库,国产浏览器。
免费提供724小时技术支持,免费提供微信技术支持,免费提供电话技术支持,免费提供QQ技术支持,免费提供远程协助,免费提供远程代码调试服务,免费提供业务逻辑代码定制开发服务,免费提供驻场开发,免费提供上门服务。
同时呢在这里也告诉大家一个好消息,我们开源了,这也是和开发组沟通的结果,现在所有网友均可免费下载源码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwnB0Dk9D,这里开源也是希望能够和广大网友共同学习,共同进步,大家可以一起讨论。
实际上还有很多网友是直接将源码下载下来然后集成在项目中给客户使用,这都是可以的。
我们也会经常将一些经验在这里给大家分享。主打的就是一个共同学习,共同进步。除了CSDN的平台,我们还在其它的平台也有分享,比如头条,B站,抖音。大家也是可以关注一波。
后端项目组这边选的是JAVA,公司是有自己的产品,基本上给客户项目都是用的这一套产品,是之前开发的
之前在网上也找过相关的资料,论坛上也有网友交流过,加过很多QQ群和微信群,但是结果都不太令人满意。
网上的文章基本上全部都在讲如何调用HTML5的API,这是前端的方案,后端是一点都没讲,也没有提供代码,想测试都没办法测试。
几乎所有的文章都是说的调HTML5的API,也调研过这个方案,这个方案不支持IE,兼容性不过关,然后稳定性也达不到要求,公司这边也不敢随便用,主要是怕踩坑。另外一点就是领导这边要求的是需要提供完整源代码和成功案例
网上的资料基本上都是一些没人维护的开源方案,基本上成熟的商业解决方案很少,公司这边也不敢随便用,还是得用成熟的商业解决方案,主要考虑一点就是有长期的产品维护和技术支持,用户那边出个新的需求也能够满足,有问题的话也能够及时响应,用户比较在意服务这块。网上的文章基本上讲的都是HTML5的JS,对于具体的细节讲的不多,只说了调API,对于如何断点续传没讲。
两个方面,一个是功能的实现。客户是一个政府单位,现要求能够在网页上面上传文件夹,文件夹里面大约有1万多个文件,有大有小,大的有1G~10G,小的有几MB,
下载这块是一个痛点吧,上传的原理到是不复杂,但是网上提供完整源代码的不能说没有,只能说很少。
实际上客户这边比较在意两点
客户这边传的文件比较大,前端上传大文件的解决方案网上说的到是多,能用的产品非常少,稳定的可商用的就更少了。
大领导这边要求的话是需要提供前端,后端,控件源代码的,主要的一个方面就是考虑到后期的维护
前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因为新项目和老项目都用了两种IDE。
文件夹上传的时候需要保存层级结构,同时能够将层级结构信息保存到数据库中,同时还需要支持文件夹下载,下载下来的文件夹要和上传的文件夹层级结构一模一样。要求支持断点续传,支持进度信息离线存储,用户可能传一半没有传完,下班了,明天上班后继续上传,电脑晚上到点需要关机,
支持加密传输,支持国密加密算法SM4,要求支持下载,支持非打包方式下载,
浏览器要求支持包含IE在内的所有浏览器,
系统环境要求支持信创国产化,比如银河麒麟,中标麒麟,统信UOS,龙芯,
数据库支持MySQL,Oracle,达梦数据库,人大金仓,需要提供前端源码,后端源码,控件源码,公司自己的项目,也有自己的产品,后续需要集成使用,提供7
24小时技术支持服务,提供文档教程,视频教程,远程技术指导,1对1技术支持服务,提供手机,微信,QQ,邮箱,企业微信等联系方式。
作为学生来讲,能够吃透源代码里面的技术,找个工作是非常轻松的,而且对于学生来讲,比较重要的是提供教程,这一点目前来说,整个互联网上都没有哪一个开源项目能够做到。这确实是一个不可多得的开源项目,不仅能够从里面学习到优秀的产品设计和构架设计,还能够在QQ群里面(374992201)和大牛一起交流学习进步,认识更多的大牛。
刚才也有网友问了,实际上断点续传的思路并不复杂,原理也很简单,关键的是处理一些异常的情况,以及产品的稳定性,可扩展性,兼容性。因为用户实际的应用场景并不是单一的应用场景,用户的应用场景可能比较复杂。
平时在网很难接触到这种优秀的开源的商业级的成熟软件产品,并且是完整开源,前端,后端,控件源代码都开源了。作为计算机专业的学生来讲,把这个项目里面的知识点掌握了,对自己以后找工作也是有很大的帮助的。
JAVA大文件上传,HTTP 传输大文件的几种方案,JAVA实现浏览器端大文件分片上传实例解析,JAVA大文件分片上传/多线程上传解决方案,支持超大文件HTTP断点续传方法,
内网/外网大文件上传解决方案,B/S实现文件夹的上传和下载,用JAVA实现大文件上传及显示进度信息,JAVA实现大文件多线程上传案例,IE浏览器如何实现断点续传,
JAVA 大文件上传解决方案(500M以上),JAVA大文件(视频)切割上传,上传大文件的解决方案,JAVA大文件(10G以上)的上传下载实现技术,开发实例:后端JAVA和前端VUE实现文件上传和下载功能,java大文件上传,jsp大文件上传,SpringBoot大文件上传,JAVA实现大文件上传插件,
JSP文件分片上传,断点续传,JAVA大文件分片上传示例,断点续传思路

视频教程

观看视频:https://www.ixigua.com/7227314770696012322

导入项目

导入到Eclipse:http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
导入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
springboot统一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2

下载示例

版本:6.5.41
https://gitee.com/xproer/up6-jsp-eclipse/
image

工程

image

NOSQL

NOSQL示例不需要任何配置,可以直接访问测试
image

创建数据表

选择对应的数据表脚本,这里以SQL为例
image
image

修改数据库连接信息

image

访问页面进行测试

image

文件存储路径

up6/upload/年/月/日/guid/filename
image
image

免费下载报价单和产品源代码

大文件上传控件(up6)

个人版:http://www.ncmem.com/webapp/up6/purchase.aspx
政企版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=ent
年费版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=year
OEM版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=oem
源码版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=code
免费下载源代码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
免费下载授权器:https://drive.weixin.qq.com/s?k=ACoAYgezAAw0P06owX

大文件上传下载控件(up6-down2)

政企版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=ent
年费版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=year
OEM版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=oem
源码版:http://www.ncmem.com/webapp/up6/purchase.aspx?type=code
源码工程文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
免费下载源代码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
免费下载授权器:https://drive.weixin.qq.com/s?k=ACoAYgezAAw0P06owX

全球唯一

1.全球唯一商业化开源产品,全球唯一免费提供源代码下载服务,面向政府和企业完全开放源代码,满足政府和企业100%自主安全可控需求。
免费下载产品源代码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwnB0Dk9D

源码

从泽优核心产品代码库中拉取代码
Alt

ActiveX-x86-工程

全球唯一免费提供源码讲解服务,功能讲解,逻辑讲解,原理讲解,思路讲解,核心代码功能实现讲解,新业务功能扩展指导,免费提供编译指导,免费提供部署指导
Alt

ActiveX-x64-工程

编译
打包
控件包

拉取火狐控件代码

Alt

火狐Firefox控件工程截图

Alt

谷歌Chrome控件项目截图

Alt
chr工程编译成功
打包
打包成功

edge工程

项目编译成功
edge工程编译成功

macOS控件源码截图

免费提供macOS平台编译部署指导,远程一对于专业开发人员指导
Alt

macOS(x86)控件编译

Alt

Linux工程源码

免费提供Linux版控件编译,打包,部署指导,远程一对一语音视频教程
Alt

linux控件编译截图

Alt

linux控件打包截图

Alt

龙芯(LoongArch)工程源码

免费提供龙芯(LoongArch)平台控件编译,打包,部署远程一对一专业指导。

龙芯控件编译截图

Alt

兼容性

2.国内唯一支持IE浏览器
支持IE6,IE7,IE8,IE9,IE10,IE11
Alt
3.国内唯一支持COM技术构架

第三方应用集成

4.国内唯一提供第三方应用支持:泛微OA,通达OA,Discuz,
Alt
Alt
Alt
5.国内唯一支持多种开发语言(.NET.NET WinForm,.NET Core,JAVA,PHP,C++,WTL,VB)

技术支持

6.国内唯一免费提供技术交流群,免费提供技术支持,免费提供问题分析,免费提供问题查找,免费提供代码编写
Alt
7.国内唯一免费提供视频教程,免费提供开发教程,

资源

8.国内唯一提供年费版授权服务,按年提供不限数量的授权,不限产品授权,不限服务器地址,不限授权数量
免费下载大文件上传控件(up6)年费版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwRy0nwUz
免费下载大文件上传下载控件(up6+down2)年费版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwd4Uoe12
9.国内唯一提供产品完全买断服务,一次性买断产品授权,完全不限授权数量,不限授权产品,任意使用。
免费下载大文件上传控件(up6)-OEM版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwR88Xlam
免费下载大文件上传下载控件(up6+down2)-OEM版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
10.国内唯一提供产品源代码买断服务,完全买断产品源代码,具有独立自主技术知识产权,满足信创国产化国家战略
免费下载上传下载控件源码版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
11.国内唯一免费提供详细产品比较参数说明,可用于编写招投标要求和参数
免费下载泽优大文件上传控件(up6)产品比较文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAwCtbFcSB
Alt
12.满足企业多项目,多产品,多终端,多平台,多技术,多框架等应用场景。
13.完全开源,满足企业100%自主安全可控需求,自主编译,自主发行,自主维护。
14.支持信创国产化,满足政府信息安全需求。
15.适用群体:央企,国企,上市企业,企业集团,政府科研机构

解决方案

党政解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAw8CMjliR
央企解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwPvHk9ge
国防军工解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwomnBHGP
档案管理解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwYeg7NbY
金融行业解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAw7bPYO40
地产行业解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwB9Bc6ba
工程管理解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAw0VdLVsH
教程解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwMm9JsV5
医疗行业解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAw19MkH5b
广告行业解决方案:https://drive.weixin.qq.com/s?k=ACoAYgezAAwKjwJTD0

标杆案例

标杆案例:中国港湾,中国中车,中国石油,中国石化,长江电力
Alt
标杆案例-中国港湾:https://www.ixigua.com/7276384414878958136
标杆案例-中国中车:https://www.ixigua.com/7232111895313023520
标杆案例-中国石油:https://www.ixigua.com/7232111895313023520
标杆案例-中信证券:https://www.ixigua.com/7282205969273061945
标杆案例-爱德数智:https://www.ixigua.com/7330489273650676235
标杆案例-金润方舟:https://www.ixigua.com/7329817304764678656
标杆案例-沈阳自动化研究所:https://www.ixigua.com/7330982949393072666
标杆案例-上海通用:https://www.ixigua.com/7331303913619980800
标杆案例-一汽大众:https://www.ixigua.com/7331676432294707738

免费资源

产品比较:https://drive.weixin.qq.com/s?k=ACoAYgezAAwNT1peJ1
白皮书:https://drive.weixin.qq.com/s?k=ACoAYgezAAwqb51JS5
产品源代码文档:http://www.ncmem.com/webapp/up6/purchase.aspx?type=code
个人版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoNfBY7s
政企版报价单:http://www.ncmem.com/webapp/up6/purchase.aspx?type=ent
年费版报价单:http://www.ncmem.com/webapp/up6/purchase.aspx?type=year
源码版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwU9OXy9Z
开发文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAwa327yop
产品源代码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
授权生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1
up6-asp.net-vs2013示例:https://gitee.com/xproer/up6-asp-net/tree/6.5.41/
up6-net-core示例:https://gitee.com/xproer/up6-net-core
up6-.net-winform示例:https://gitee.com/xproer/up6-code-csharp
up6-cpp-wtl示例:https://gitee.com/xproer/up6-cpp-wtl
up6-jsp-eclipse示例:https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.41/
up6-jsp-myeclipse示例:https://gitee.com/xproer/up6-jsp-myeclipse/tree/6.5.41/
up6-jsp-springboot示例:https://gitee.com/xproer/up6-jsp-springboot/tree/6.5.41/
up6-php5-示例:https://gitee.com/xproer/up6-php5/tree/6.5.41/
up6-php7-示例:https://gitee.com/xproer/up6-php/tree/6.5.41/
up6-Discuz插件:https://gitee.com/xproer/up6-discuz
up6-vue-cli示例:https://gitee.com/xproer/up6-vue-cli
up6-ExtJS 6示例:https://gitee.com/xproer/up6-extjs6
示例下载

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaHttpClient库可以用于实现HTTP文件上传,而断点续传则是通过在请求头中添加"Range"字段来实现的。下面是一个简单的Java代码示例,演示了如何使用HttpClient库实现HTTP文件断点续传上传: ```java import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.FileEntity; import org.apache.http.impl.client.DefaultHttpClient; public class HttpResumeUpload { public static void main(String[] args) throws IOException { String url = "http://example.com/upload"; String filePath = "/path/to/file"; int bufferSize = 1024 * 1024; // 每次上传的字节数 RandomAccessFile file = new RandomAccessFile(filePath, "r"); long fileSize = file.length(); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); post.setHeader("Range", String.format("bytes=%d-%d", 0, bufferSize - 1)); // 设置上传起始位置 post.setHeader("Content-Length", String.valueOf(bufferSize)); // 设置上传数据长度 HttpEntity entity = new FileEntity(file.getFD(), 0, bufferSize); post.setEntity(entity); HttpResponse response = client.execute(post); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 206) { // 部分上传成功 InputStream inputStream = response.getEntity().getContent(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = inputStream.read(buffer)) != -1) { // 处理服务器返回的响应数据 } post.setHeader("Range", String.format("bytes=%d-%d", bufferSize, fileSize - 1)); // 设置下一次上传起始位置 post.setHeader("Content-Length", String.valueOf(fileSize - bufferSize)); // 设置下一次上传数据长度 entity = new FileEntity(file.getFD(), bufferSize, fileSize - bufferSize); post.setEntity(entity); response = client.execute(post); statusCode = response.getStatusLine().getStatusCode(); // 处理服务器返回的响应数据 } else if (statusCode == 200) { // 全部上传成功 // 处理服务器返回的响应数据 } file.close(); client.getConnectionManager().shutdown(); } } ``` 在上面的代码中,我们首先打开待上传文件,然后通过HttpClient库发送一个HTTP POST请求,请求的内容是文件的一部分数据。如果服务器返回206状态码,表示部分数据上传成功,我们就从服务器返回的响应中读取剩下的数据,然后设置下一次上传的起始位置和长度,再次发送HTTP POST请求。如果服务器返回200状态码,表示全部数据上传成功,我们就可以关闭文件HTTP客户端了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值