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