FTPClient Java 加速下载
FTPClient Java speedup download
1 个 apaches 线程的最大下载速度是多少 FTP客户端?
我无法通过 FPTSClient 连接 (AUTH SSL) 获得超过 6mb/s 的速度。
当我通过像 FTP Rush 这样的 Ftp 工具连接时,我能够获得 150mb/s 甚至更多!
1,000.0M byte(s) in 6.97 (150,376.60 KBps)
我已经尝试将 ftpBufferSize 增加到 1024*1024 和 1024*1024*10 之间,但没有任何改变。
这只是我连接到 ftp:
的一个小片段
ftp.setConnectTimeout(8000);
ftp.setDefaultPort(this.port);
try {
ftp.connect(this.host);
} catch (Exception e) {
LogController.logMessage("Connect::tryConnect -> Exception: "+e.getMessage());
LogController.logMessage(e);
}
if(ftp.isConnected()) {
if(this.ssl) {
((FTPSClient) ftp).execPBSZ(0);
}
LogController.logMessage("Connect::tryConnect -> Open new connection.");
if(!ftp.login(this.username, this.password)) {
LogController.logMessage("Connect::tryConnect -> "+getReplyString());
ftp.logout();
} else {
LogController.logMessage("Connect::tryConnect -> User login correct.");
if(this.ssl) {
((FTPSClient) ftp).execPROT("P");
LogController.logMessage("Connect::tryConnect -> "+getReplyString());
}
if(ftp.getSystemType().toLowerCase().contains("win") == false)
ftp.configure(new FTPClientConfig(FTPClientConfig.SYST_UNIX));
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
LogController.logMessage(getReplyString());
} else {
ftp.enterLocalPassiveMode();
ftp.setBufferSize( 10485760 );
ftp.setRemoteVerificationEnabled(false);
ftp.setListHiddenFiles(true);
这是最终的下载片段:
if ( download ) {
OutputStream output;
output = new FileOutputStream(tmpPath);
if(!ftp.setFileType(FTP.BINARY_FILE_TYPE))
LogController.logMessage("Connect::downloadFiles -> Could'nt set binary file type.");
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Date d = new Date();
String date = dateFormat.format(d);
LogController.logMessage("Connect::downloadFiles -> Start downloading "+file+", "+date+", Buffersize: "+ftp.getBufferSize());
if(!ftp.retrieveFile(ftpFilePath, output)) {
LogController.logMessage("Connect::downloadFiles -> Could'nt download the file: "+file);
output.close();
return false;
} else {
output.close();
d = new Date();
date = dateFormat.format(d);
LogController.logMessage("Connect::downloadFiles -> Download finished. "+date);
return true;
}
}
我需要传输大约 100MB 的大文件。有什么办法可以加快下载速度吗?
提前致谢,问候。
终于找到解决办法了。
删除此行后:
((FTPSClient) ftp).execPROT("P");
达到 100MBps+ 没有问题。问候,使用这条线无法获得高于 6-7MBps 的速率。
1 个 apaches 线程的最大下载速度是多少 FTP客户端?
我无法通过 FPTSClient 连接 (AUTH SSL) 获得超过 6mb/s 的速度。 当我通过像 FTP Rush 这样的 Ftp 工具连接时,我能够获得 150mb/s 甚至更多!
1,000.0M byte(s) in 6.97 (150,376.60 KBps)
我已经尝试将 ftpBufferSize 增加到 1024*1024 和 1024*1024*10 之间,但没有任何改变。
这只是我连接到 ftp:
的一个小片段 ftp.setConnectTimeout(8000);
ftp.setDefaultPort(this.port);
try {
ftp.connect(this.host);
} catch (Exception e) {
LogController.logMessage("Connect::tryConnect -> Exception: "+e.getMessage());
LogController.logMessage(e);
}
if(ftp.isConnected()) {
if(this.ssl) {
((FTPSClient) ftp).execPBSZ(0);
}
LogController.logMessage("Connect::tryConnect -> Open new connection.");
if(!ftp.login(this.username, this.password)) {
LogController.logMessage("Connect::tryConnect -> "+getReplyString());
ftp.logout();
} else {
LogController.logMessage("Connect::tryConnect -> User login correct.");
if(this.ssl) {
((FTPSClient) ftp).execPROT("P");
LogController.logMessage("Connect::tryConnect -> "+getReplyString());
}
if(ftp.getSystemType().toLowerCase().contains("win") == false)
ftp.configure(new FTPClientConfig(FTPClientConfig.SYST_UNIX));
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
LogController.logMessage(getReplyString());
} else {
ftp.enterLocalPassiveMode();
ftp.setBufferSize( 10485760 );
ftp.setRemoteVerificationEnabled(false);
ftp.setListHiddenFiles(true);
这是最终的下载片段:
if ( download ) {
OutputStream output;
output = new FileOutputStream(tmpPath);
if(!ftp.setFileType(FTP.BINARY_FILE_TYPE))
LogController.logMessage("Connect::downloadFiles -> Could'nt set binary file type.");
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Date d = new Date();
String date = dateFormat.format(d);
LogController.logMessage("Connect::downloadFiles -> Start downloading "+file+", "+date+", Buffersize: "+ftp.getBufferSize());
if(!ftp.retrieveFile(ftpFilePath, output)) {
LogController.logMessage("Connect::downloadFiles -> Could'nt download the file: "+file);
output.close();
return false;
} else {
output.close();
d = new Date();
date = dateFormat.format(d);
LogController.logMessage("Connect::downloadFiles -> Download finished. "+date);
return true;
}
}
我需要传输大约 100MB 的大文件。有什么办法可以加快下载速度吗? 提前致谢,问候。
终于找到解决办法了。 删除此行后:
((FTPSClient) ftp).execPROT("P");
达到 100MBps+ 没有问题。问候,使用这条线无法获得高于 6-7MBps 的速率。