daniel123

 使用 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


分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-12-27
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-08
  • 2022-01-13
  • 2021-09-01
  • 2022-12-23
  • 2021-05-19
  • 2021-10-18
  • 2021-06-04
相关资源
相似解决方案