FTPClientを解決してファイルをアップロードして空で、0バイトを表示します

1728 ワード

 

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ではセキュリティ制限のため、一部のポートが開いていないため、ブロックが発生する可能性があります.