gpt4 book ai didi

java - Apache Java FTP 客户端不会在某些服务器上切换到二进制传输模式

转载 作者:行者123 更新时间:2023-11-29 04:48:23 24 4
gpt4 key购买 nike

我正在使用 org.apache.commons.net.ftp 库来处理 FTP 服务器。我使用大约 5 个 FTP 服务器,其中一个不能正常工作(对我来说)。对于上传文件,我也使用方法 ftpClient.setFileType(FTP.BINARY_FILE_TYPE),但在此服务器上上传文件的大小与我本地硬盘上的大小不同。它通常是 MP3 文件,当我尝试播放上传的 MP3 时,有一些嗡嗡声。我怀疑 FTP 服务器的配置有误,但负责这台服务器的公司不太可能做一些更改。还有一个非常重要的注意事项:当我使用 Total Commander 或 WinSCP 上传文件时,上传的文件是正确的,大小相同。

这是我的代码:

public class FtpConnection {
String FTP_SERVER;
String FTP_USER;
String FTP_PASSWORD;
int FTP_PORT;
FTPClient ftpClient;
int attempts = 3;
long FILE_SIZE;

public FtpConnection() {
FTP_SERVER = StradaAd.FTP_SERVER;
FTP_USER = StradaAd.FTP_USER;
FTP_PASSWORD = StradaAd.FTP_PASSWORD;
FTP_PORT = StradaAd.FTP_PORT;

ftpClient = new FTPClient();

ftpClient.setCopyStreamListener(streamListener);

ftpClient.setBufferSize(1024 * 1024 * 1024);
ftpClient.setConnectTimeout(240000);
ftpClient.setDataTimeout(240000);
try {
ftpClient.connect(FTP_SERVER, FTP_PORT);
ftpClient.setControlKeepAliveTimeout(300);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
StradaAd.errorArea.append("Operation failed. Server reply code: " + replyCode);
return;
}
boolean success = ftpClient.login(FTP_USER, FTP_PASSWORD);

if (!success) {
//unsuccess
}
} catch (IOException ex) {
//error
}
}

public boolean uploadFile(File source, String destination, String chain) {
try {
FILE_SIZE = source.length();

ftpClient.cwd("//" + chain + "/REKLAMY/");

for(int i=0;i<attempts;i++) {
ftpClient.storeFile(destination, new FileInputStream(source));

for(FTPFile f : ftpClient.listFiles()) {
if(f.getName().equals(destination) && f.getSize() == source.length())
return true;
}
}
return false;
} catch (IOException ex) {
Logger.getLogger(FtpConnection.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
}

有人知道如何更改此代码或将此 FTP 服务器设置为具有相同大小的上传文件的解决方案吗?在此先感谢您的帮助。

最佳答案

您调用 FTPClient.setFileType method太早了。

至少 ProFTPD或 FileZilla FTP 服务器在身份验证后重置默认传输模式(FTPClient.login)。

.setFileType 调用移到 .login 之后。

关于java - Apache Java FTP 客户端不会在某些服务器上切换到二进制传输模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com