FTP 传输文件,不报错,但是文件就是不能写入成功

 使用 FTPClient 时产生的问题

 

代码如下

public class LUX_FtpFile_mxJPO {
public void uploadFTPFile(Context context, String args[]){
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
try{
ftpClient.connect("luxottica-redcarpet.ftp.upload.akamai.com");
ftpClient.login("luxottica-redcarpet", "MO7OSsY5");
File srcFile = new File("/tmp/00R000003__2600.jpg");
fis = new FileInputStream(srcFile);
ftpClient.changeWorkingDirectory("758608/TEST/TMK/0R/");
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("00R000003__2600.jpg", fis);

} catch (SocketException e) {
e.printStackTrace();
throw new RuntimeException("ftp client error", e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("ftp client error", e);
}finally{
IOUtils.closeQuietly(fis);
try{
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("close ftp exception", e);
}
System.out.println("uploaded succesfully");
}
}
}

不报错,目的路径下面根本刷不出来文件
解决办法
加如下代码f

tpClient.enterLocalPassiveMode();


这是 设置 传输模式的 FTPClient 有四种传输模式
ACTIVE_LOCAL_DATA_CONNECTION_MODE
ACTIVE_REMOTE_DATA_CONNECTION_MODE
PASSIVE_LOCAL_DATA_CONNECTION_MODE
PASSIVE_REMOTE_DATA_CONNECTION_MODE

上面的方法是设置为模式
PASSIVE_LOCAL_DATA_CONNECTION_MODE
根据FTPClient的官方文档,可以总结出
四种不同的模式之间的主要不同主要是因为FTP 可以建立在 服务器和本地 以及 服务器和服务器之间。
默认传输模式为
ACTIVE_LOCAL_DATA_CONNECTION_MODE , 而这种模式下,数据传输是从 服务器到本地
如果想要本地到服务器,那么就需要设置 模式为
PASSIVE_LOCAL_DATA_CONNECTION_MODE
就是上面的代码
tpClient.enterLocalPassiveMode();


详细解释参考 官方文档
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#ACTIVE_LOCAL_DATA_CONNECTION_MODE


你可能感兴趣的:(FTP 传输文件,不报错,但是文件就是不能写入成功)