Q:用FTPClient紊册,執(zhí)行到ftp.storeFile(fileName,inputFile);返回false,在本地測試時可以上傳文件男翰,部署到服務(wù)器上傳文件總是返回false另患;
A:加上ftpclient.enterLocalPassiveMode();
ftp.storeFile(fileName,?inputFile);問題解決
補充說明:FTPClient.enterLocalPassiveMode();這個方法的意思就是每次數(shù)據(jù)連接之前,ftp client告訴ftp server開通一個端口來傳輸數(shù)據(jù)奏篙。為什么要這樣做呢柴淘,因為ftp server可能每次開啟不同的端口來傳輸數(shù)據(jù),但是在linux上或者其他服務(wù)器上面秘通,由于安全限制为严,可能某些端口沒有開啟,所以就出現(xiàn)阻塞肺稀。
/**ftp連接方式**/
主動 FTP : ? 命令連接:客戶端 >1024 端口 -> 服務(wù)器 21 端口 ? 數(shù)據(jù)連接:客戶端 >1024 端口 <- 服務(wù)器 20 端口
被動 FTP : ? 命令連接:客戶端 >1024 端口 -> 服務(wù)器 21 端口 ? 數(shù)據(jù)連接:客戶端 >1024 端口 -> 服務(wù)器 >1024 端口
FTP協(xié)議有兩種工作方式:PORT方式和PASV方式第股,中文意思為主動式和被動式。
PORT(主動)方式的連接過程是:客戶端向服務(wù)器的FTP端口(默認是21)發(fā)送連接請求话原,服務(wù)器接受連接夕吻,建立一條命令鏈路。當需要傳送數(shù)據(jù)時繁仁, 客戶端在命令鏈路上用PORT命令告訴服務(wù)器:“我打開了***X端口涉馅,你過來連接我”。于是服務(wù)器從20端口向客戶端的***X端口發(fā)送連接請求黄虱,建立 一條數(shù)據(jù)鏈路來傳送數(shù)據(jù)稚矿。
PASV(被動)方式的連接過程是:客戶端向服務(wù)器的FTP端口(默認是21)發(fā)送連接請求,服務(wù)器接受連接捻浦,建立一條命令鏈路晤揣。當需要傳送數(shù)據(jù)時, 服務(wù)器在命令鏈路上用PASV命令告訴客戶端:“我打開了***X端口朱灿,你過來連接我”昧识。于是客戶端向服務(wù)器的***X端口發(fā)送連接請求,建立一條數(shù)據(jù)鏈 路來傳送數(shù)據(jù)盗扒。