FTPClientを解決してファイルをアップロードして空で、0バイトを表示します
JAVAはFTPClientを使用してファイルをアップロードするときは常に空ですが、FileZillaクライアントを使用するときはできません.
後で資料を調べてみると、FTPサーバーにはパッシブモードとアクティブモードがあります.(具体的には別途資料を調べる)
JAVAでFTPClientをパッシブモードに設定すれば問題解決.
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.File;
import java.io.FileInputStream;
/**
* Created by Administrator on 2018/4/13.
*/
public class FtpUtil {
public void testFTPClient() throws Exception {
try {
// FTPClient
FTPClient ftpClient = new FTPClient();
// ftp
ftpClient.connect("***.***.***.***", 21);
// ftp,
ftpClient.login("****", "****");
//
FileInputStream inputStream = new FileInputStream(new File("filePath"));
// ( , , , refused:connect )
ftpClient.enterLocalPassiveMode();
//
ftpClient.changeWorkingDirectory("FTP ");
//
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
System.out.println("1");
//
ftpClient.storeFile("hello1.jpg", inputStream);
System.out.println("2");
//
ftpClient.logout();
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
補足:
FTPClient.enterLocalPassiveMode()を呼び出します.この方法は、データ接続のたびにftpクライアントがftp serverにデータを転送するためのポートを開設するように伝えることを意味します.なぜそうするのかというと、ftp serverは異なるポートを開くたびにデータを転送する可能性がありますが、linuxではセキュリティ制限のため、一部のポートが開いていないため、ブロックが発生する可能性があります.