社区
Java SE
帖子详情
ftp实现多线程上传时,遇到问题,请高手指点。
张建飞(Frank)
2007-07-05 04:40:04
问题描述:
在客户端有一个大文件,要使用多线程将其上传到服务器端
主要有以下问题。
一、怎样将这个文件拆分,以便每个线程传递其一部分,当然在客户端将其拆分好,再上传肯定是可以的。我的意思是可不可以先获得文件的输入流FileInputStream(new File(文件名)),然后在流里面控制要传递哪部分data。
二、当这些被切割的文件传到服务器后,怎样在服务器端将其还原为原来的文件呢?
如果不能对服务器端编程,就不可能还原文件?
...全文
582
7
打赏
收藏
ftp实现多线程上传时,遇到问题,请高手指点。
问题描述: 在客户端有一个大文件,要使用多线程将其上传到服务器端 主要有以下问题。 一、怎样将这个文件拆分,以便每个线程传递其一部分,当然在客户端将其拆分好,再上传肯定是可以的。我的意思是可不可以先获得文件的输入流FileInputStream(new File(文件名)),然后在流里面控制要传递哪部分data。 二、当这些被切割的文件传到服务器后,怎样在服务器端将其还原为原来的文件呢? 如果不能对服务器端编程,就不可能还原文件?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zjf405
2007-07-20
打赏
举报
回复
谁有做过这方面的给点思路,站内短消息我~
500求解!
zjf405
2007-07-20
打赏
举报
回复
帮顶,期待高人~
张建飞(Frank)
2007-07-11
打赏
举报
回复
在上传文件时,遇到新问题,当网络连接断开后,会触发一个connect reset exception异常。同时刚刚上传未成功的文件,也没有保存下来。这样就不能断点续传了,请问要怎么解决?
张建飞(Frank)
2007-07-06
打赏
举报
回复
to ssnec
思路的确是这样的,可是问题就在于怎样获得这个流的分割。我尝试了几种方案结果都不行。
一、用InputStream的skip(int len)方法过滤,因为只能跳转掉len长度后传输后面的字节,当有3个线程或更多时,肯定是不行的。
二、结合FileChannel的position()方法,去定位流中当前要传输的位置,然后通过read(buf,0,length)取得要传输的那段流,比如ssnec说的传输50k到100k的位置,就可以fileIS.position(50K);
byte[] buf=new buf[50K];
fileIS.read(buf,0,50K);
来完成。但是当文件很大的时候呢,假如文件是2G,那么每个线程负责传500M。
还是这样的,byte[] buf=new buf[50M]; GOD!!这么大的数组,JVM马上就out of memory了。
ok,既然这样不行那就把buf设小一点,然后做一个判断,如下
file.position(startPos);
byte[] buf = new byte[2048];
int len=2048;
while (in.read(buf,0,len)!= -1 && startPos < endPos){
ftp.put(buf, fileName,true);
startPos=startPos+len;
}
似乎是可以了,但是这样频繁的put()操作也同样有问题,你会发现BindException的错误。
原因是短时间内new socket操作很多,而socket.close( )操作并不能立即释放绑定的端口,导致系统资源耗尽。
所以最后还是决定放弃在流里面分割的想法,其实用多个线程传多个文件,和将一个大文件用多个线程传,效果也是一样的嘛。
ssnec
2007-07-06
打赏
举报
回复
我给个思路吧.
可以后台做个线程池,线程池里假设有4个线程,你把文件的长度统计一下(或者大致分配一下.)
每个线程从固定的点开始读文件(读固定长度.)
假设:文件有200个字节.
4个线程 分别从 0 50 100 150开始读,每个线程读50个字节,这样速度就能快很多.
等上传完后再合并文件.我只知道一个合并文件的方法:
COPY:[源盘][路径]〈源文件名1〉〈源文件名2〉…[目标盘][路径]〈目标文件名〉;
liujun999999
2007-07-06
打赏
举报
回复
多线程上传必须要有服务器端的,也就是说在你的服务器上必须要有个软件复杂组装
zjf405
2007-07-05
打赏
举报
回复
帮顶
python
实现
多线程
往
FTP
上传
文件
本文介绍了一种利用
多线程
提高
FTP
文件
上传
效率的方法。通过优化代码,
实现
了连接复用,并控制了并发线程数量,有效提升了多文件
上传
的速度。
Java
多线程
实现
FTP
批量
上传
文件
该代码示例展示了如何使用
FTP
进行文件
上传
,包括
FTP
客户端的构建、连接工厂的创建、
多线程
任务的执行以及
上传
结果的处理。通过
FTP
Factory管理
FTP
连接,使用固定大小的连接池,确保资源的有效利用。
上传
任务
实现
为Callable,允许在
多线程
环境中获取
上传
结果。在测试中,
实现
了批量文件的
上传
操作。
借助libcurl
实现
ftp
文件
上传
,断点续传demo梳理。
本文介绍了如何为企业业务搭建
FTP
服务器,
实现
大文件
上传
,包括协议选择、使用libcurl库、断点续传功能的
实现
,以及在Windows和Linux环境下测试和优化的过程。
qt
实现
基于
FTP
文件存储系统
实现
多线程
上传
,多文件下载
本文介绍了一种基于
FTP
协议的
多线程
文件传输系统,适用于无线网络环境。系统采用QtCreator和Centos7开发,支持Windows10客户端与Linux服务端。文章详细解释了
多线程
上传
逻辑,包括文件切片、线程分配、数据包构建及服务端处理流程。此外,还介绍了多文件下载的
实现
方法。
nginx+tomcat使用apache的
Ftp
Client
上传
图片
时
由于
多线程
问题
导致的文件大小为0的
问题
在nginx反向代理下使用Apache
Ftp
Client
上传
图片
时
,
遇到
文件大小为0和504网关超
时
的
问题
。经过排查,不是nginx超
时
配置、iptables防火墙、目录权限或
FTP
的主动/被动模式导致的,而是
多线程
并发
上传
时
的
问题
。改为
多线程
控制后,
问题
得到解决。
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章