記在k8s的pod上使用apache的commons-net:ftp功能時,ftp一直上傳文件失敗

    在k8s的pod上使用apache的commons-net:ftp功能時,一直顯示:apache

    

    即上傳文件失敗,可是在本地環境進行上傳時卻又顯示上傳成功,讓人十分不解。在網上搜索了一下ftp的一些資料發現ftp共有兩種模式(參考https://blog.csdn.net/nyunyuzhao/article/details/5734978),分爲被動(pasv)和主動模式(port),commons-net:ftp默認使用的是主動模式,即客戶端發起鏈接,告訴服務器我開了某個端口你過來鏈接我,在本地環境下由於有公網IP的存在,服務器端可以經過ip+port訪問到客戶端機器,可是k8s的pod暴露出去的非實際ip,因此服務器端不能鏈接到客戶端,形成了文件沒法傳輸成功。在被動模式中,都是客戶端去鏈接服務器端,因此可以訪問。服務器

    commons-net:ftp設置使用被動模式的代碼爲:.net

FTPClient ftpClient = new FTPClient();
ftpClient.setDefaultPort(ftpServerPort);
ftpClient.connect(ftpServer);
ftpClient.login(username, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setBufferSize(10 * 1024);
ftpClient.setSendBufferSize(10 * 1024);
ftpClient.enterLocalPassiveMode();//重點在這一句,就是這裏設置主被動模式

參考博文:https://blog.csdn.net/nyunyuzhao/article/details/5734978blog

相關文章
相關標籤/搜索