JAVA实现大文件多线程上传案例

JAVA实现大文件多线程上传,分片,分块,分段,分割,切割,断点续传。

大文件,文件大小可能是1G,10G,50G,100G。

核心要求就是两个,一个是快,一个是稳定。稳定,断点续传的话,不管是关闭网页,刷新页面,关闭浏览器,浏览器崩溃,重启浏览器,重启电脑,关闭电脑,这些情况发生后,仍然能够继续上传,也就是说上传的进度信息不能丢失,因为传的文件比较大,传的时间比较长,进度信息丢失的话,用户又要从新开始上传,这个是不能接受的。

要求多线程方式上传,一个文件用10个线程,每个线程上传一块,这样的话上传速度可以达到最大值。达到内网带宽上限,百兆的话12MB/S左右,千兆的话50MB/S左右。

文件比较大,有50G左右,用户希望能够在网页里面直接上传,一期的时候我们是直接用的HTML5的API,也就是chrome提供的API来做的,但是上线后用户反馈不是特别的好用,用户那边有些电脑用的是WIN7+IE9,chrome的API在ie9里面不支持。但是用户系统是支持的,这就把人整的有点不会了。二期的时候我们还是定制开发了,

前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因为新项目和老项目都用了两种IDE。

用户要求能够在网页上面上传文件夹,文件夹里面大约有1万多个文件,有大有小,大的有1G~10G,小的有几MB,文件夹上传的时候需要保存层级结构,同时能够将层级结构信息保存到数据库中,同时还需要支持文件夹下载,下载下来的文件夹要和上传的文件夹层级结构一模一样。

要求支持断点续传,支持进度信息离线存储,用户可能传一半没有传完,下班了,明天上班后继续上传,电脑晚上到点需要关机,支持加密传输,支持国密加密算法SM4,要求支持下载,支持非打包方式下载,浏览器要求支持包含IE在内的所有浏览器,

系统环境要求支持信创国产化,比如银河麒麟,中标麒麟,统信UOS,龙芯,数据库支持MySQL,Oracle,达梦数据库,人大金仓,需要提供前端源码,后端源码,控件源码,公司自己的项目,也有自己的产品,后续需要集成使用,

要求提供7*24小时技术支持服务,提供文档教程,视频教程,远程技术指导,1对1技术支持服务,提供手机,微信,QQ,邮箱,企业微信等联系方式。

下载示例:

https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/

工程

NOSQL

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

创建数据表

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

修改数据库连接信息

访问页面进行测试

文件存储路径

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

相关问题:
1.javax.servlet.http.HttpServlet错误
2.项目无法发布到tomcat
3.md5计算完毕后卡住
4.服务器找不到config.json文件

相关参考:

文件保存位置

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用JSch库来实现Java上传文件到SFTP服务器的功能,以下是一个简单的示例代码: ```java import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class SftpUploader { private String host; private int port; private String username; private String password; private String remoteDirectory; public SftpUploader(String host, int port, String username, String password, String remoteDirectory) { this.host = host; this.port = port; this.username = username; this.password = password; this.remoteDirectory = remoteDirectory; } public void uploadFile(String localFilePath, String remoteFilename) throws Exception { JSch jsch = new JSch(); Session session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp sftpChannel = (ChannelSftp) channel; sftpChannel.cd(remoteDirectory); File localFile = new File(localFilePath); InputStream inputStream = new FileInputStream(localFile); sftpChannel.put(inputStream, remoteFilename); inputStream.close(); sftpChannel.exit(); session.disconnect(); } } ``` 在上面的代码中,`SftpUploader`类的构造函数接收SFTP服务器的主机名、端口号、用户名、密码和远程目录路径。`uploadFile`方法接收本地文件路径和远程文件名,然后将文件上传到远程SFTP服务器。可以在多个线程中创建`SftpUploader`实例并调用`uploadFile`方法来同时上传多个文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值