Apache FTPS客户端storeFile到Windows从Unix/Linux/Max问题的FTPS服务器
问题描述:
我有一个问题,从Unix/Mac/Linux env将文件传输到Windows FTP服务器。Apache FTPS客户端storeFile到Windows从Unix/Linux/Max问题的FTPS服务器
虽然完全相同的java代码从Windows PC工作。 从* NIX/Mac的转移才做这个的FTP会话命令我的Windows机器上
set ftps:initial-prot
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate no
,而我没有需要他们 - 我认为它涉及到系统变量。
这是我的Java代码
protected FTPClient getClient(DeliveryDetails details) {
return new FTPSClient(false); // the connection is Explicit
}
public void setClient(FTPClient client, DeliveryDetails details) throws Exception {
client.setConnectTimeout(10000);
client.setDefaultTimeout(1000 * 60 * 2);
client.setControlKeepAliveTimeout(300);
client.setDataTimeout(15000);
client.connect(ftpDetails.host, ftpDetails.port);
client.setBufferSize(1024 * 1024);
client.login(ftpDetails.username, ftpDetails.getSensitiveData());
client.setControlEncoding("UTF-8");
client.setFileType(FTP.BINARY_FILE_TYPE);
client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);
FTPSClient ftpsClient = (FTPSClient) client;
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
// both with it and without it didnt work ftpsClient.setWantClientAuth(false);
}
public void saveToServer(FTPClient client, File fileName, InputStream stream){
BufferedInputStream bis = new BufferedInputStream(stream);
boolean isSaved = client.storeFile(filename, bis);
client.logout();
}
什么是相当于这个参数在FTPS阿帕奇类的?
set ftps:initial-prot
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ssl:verify-certificate no
答
看来,Windows NT不支持写入数据FTP.BLOCK_TRANSFER_MODE
简单的解决方法是
private static final String WINDOWS_NT_SYTEM_TYPE = "Windows_NT";
....
....
try {
String res = client.getSystemType();
if (res.equals(WINDOWS_NT_SYTEM_TYPE)) {
client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
} else {
client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);
}
}
1)什么是'设置FTPS:初始prot'和其他?这些'lftp'命令?不要让我们猜测!告诉我们! 2)代码在Mac和* nix上做了什么?告诉我们!确切的错误消息,日志文件,任何东西! –