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



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM