Javaを使用したFTPサーバーへのファイルのアップロード

ローカルディスクからオンラインFTPサーバーにファイルをアップロードするJavaコードを記述するには、Apache Commons Net APIがJava開発者にとって非常に良い選択です。シンプルで、FTPでのプログラミングが簡単になります.

1- Apache Commons Net

API をダウンロードするApache Commons Net API これには一連のネットワークツールが含まれており、FTP、Telnet、SMTPなどのいくつかのプロトコルをサポートしています。アップロード後、.jarファイルをプロジェクトのクラスパスに埋め込む必要があります.

2- FTPクラス FTPClient は、FTP:
  • boolean storeFile(String remote, InputStream local)
  • OutputStream storeFileStream(String remote)
  • boolean storeUniqueFile(InputStream local)
  • boolean storeUniqueFile(String remote, InputStream local)
  • OutputStream storeUniqueFileStream()
  • OutputStream storeUniqueFileStream(String remote)
これらのメソッドの違いは何ですか?まぁ!これらは次のように分類できます:
  • InputStream ローカル・ファイル( InputStream をパラメーターとして指定します)。このタイプの方法は、方法を知る必要がない場合に採用されます。 バイト がローカル・ファイルからサーバーに転送されます。これはシステムに任せます。processing.
  •  に書き込んでファイルを格納します。OutputStream (これらは、出力としてOutputStreamを持つメソッドです)。これらの種類のメソッドは、バイトの使用方法を制御する場合に必要です。あり forwardedは、独自のコードを記述して、バイト オブジェクトを介してリモートファイルパスに保存されるローカルファイル経由 OutputStreamです。これは、進捗状況 アップロードの、ファイルサイズ.
上記の2つのメソッドは、
  • リモート・ファイルに明確な名前を付ける (remote という名前の String パラメーターを受け入れるメソッド).
  • サーバー名とリモート・ファイルを一意の名前のままにします (String パラメーターを持たないこれらのメソッド)。
これらのメソッドは複雑ですが、 実際に主に使用されるのは、
  • boolean storeFile(String remote,InputStream local)
  • OutputStream storeFileStream(String remote)
これら 6 つのメソッドとは別に、ファイルのダウンロードの前後に呼び出す必要がある 2 つのメソッドがあります:
  • boolean setFileType(int fileType): ファイルの種類を決定します。FTPです。ASCII_FILE_TYPE または FTP.BINARY_FILE_TYPEは、ファイルの転送に使用されます。デフォルトのタイプはASCII(プレーンテキスト)ですが、すべてのファイルで機能させるにはバイナリにする必要があります。このメソッドは、ファイル転送が始まる前に呼び出す必要があります。
  •  boolean completePendingCommand(): このメソッドは、トランザクションを完了するためにダウンロードの完了後に呼び出す必要があります。彼女は戻ってくるtrue 転送が正常に完了した場合、そうでない場合は。falseです。このメソッドの戻り値をチェックして、アップロードが行われたことを確認する必要があります。
    デフォルトでは、FTP はクライアント用のポートを開いて接続を確立し、サーバがそのポートに接続できるようにします。これはアクティブモードですが、ファイアウォールによってブロックされ、ファイル転送が機能しない場合があります。幸いなことに、FTPプロトコルには、クライアントが接続するためにサーバーのポートを開くことによって、接続が確立されるパッシブモードである別のモードがあります。このモードはファイアウォールによってブロックされません。

    そのため、FTPClientクラスメソッドenterLocalPassiveMode().

    3- Java

    でファイルを転送する手順Apache Commons Net APIを使用してFTPサーバーにファイルを転送するコードを適切に記述するには、次の手順に従う必要があります:
    • サーバーに接続してログインします。
    • 接続にパッシブモードを使用します。
    • 転送するファイルの種類をバイナリに変更します。
    • InputStream ローカルファイルの場合.
    • メソッドの1つを呼び出しますストア...() をクリックしてファイルの転送を開始します。次の 2 つのシナリオがあります:
      • InputStream: 送信と受信はシステムに任せるので、これが最も簡単な方法です。追加のコードはなく、アイテムを渡すだけですInputStream 対応するメソッド (メソッド storeFile(String remote, InputStream local).
      • Using OutputStream: これはより複雑ですが、転送されるデータをより詳細に制御できます。一般的には、バイトを読み取るには数行のコードを書かなければなりません。InputStream ローカルファイルの OutputStream によって返されます。ストアメソッド...()は、storeFileStream(String remote).
    • Close Data Streams InputStream et OutputStream.
    • メソッドcompletePendingCommand() を使用してトランザクションを完了します。
    • サーバーから切断します.
    メソッドの戻り値 ストア...() および completePendingCommand() を使用してアップロードが完了したことを確認します.

    4- Java

    このコードは、次の2つの方法を使用してマシンからFTPサーバーにファイルを送信する方法を示しています:
    • boolean storeFile(String remote, InputStream local)
    • OutputStream storeFileStream(String remote)
    After called the storeFile()の場合、completePendingCommand()です。完全なコードは次のとおりです:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;

    public class FTPUploadFile {

    public static void main(String[] args) {
    Server String = "ServerAddress";
    int ポート = 21;
    文字列 user = "ユーザー名";
    文字列パスワード= "yourPassword";

    FTPClient ftpClient = new FTPClient();
    {

    ftpClient.connect(server, port);
    ftpClient.login(ユーザー、パスワード);
    ftpClient.enterLocalPassiveMode();

    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    // アプローチ 1: InputStream を使用してファイルをアップロードする
    File file = new File("C:/plugins and styles.txt");

    文字列パス = "プラグインとstyles.txt";
    InputStream inputStream = new FileInputStream(file);

    System.out.println("アップロード開始");
    //アップロードの出力
    boolean res = ftpClient.storeFile(path, inputStream);
    //読み込んだストリームを閉じます
    inputStream.close();

    if (res==true) {
    System.out.println("ファイル "+path+" が正常にダウンロードされました");
    }

    // 方法 2: OutputStream を使用してファイルをアップロードする
    file = new File("C:/track 1.wma");
    path = "オーディオ/トラック1.wma";
    inputStream = new FileInputStream(file);

    System.out.println("アップロード開始");
    OutputStream outputStream = ftpClient.storeFileStream(path);
    byte[] bytesIn = new byte[4096];
    int buffer = 0;

    //ファイルの末尾に達していない限り
    System.out.println("Downloading...");
    int transferred = 0;
    int percent = 0;
    //ファイルの末尾に達していない限り
    while ((buffer = inputStream.read(bytesIn)) != -1) {
    //4096バイトのバッファでデータを読み取ります
    outputStream.write(bytesIn, 0, buffer);
    転送 += buffer;
    percent = (int) (transferred*100/file.length());
    System.out.println(パーセンテージ+"%");
    }
    //書き込み読み取りストリームを閉じる
    inputStream.close();
    outputStream.close();

    //アップロード結果
    res = ftpClient.completePendingCommand();
    if (res) {
    System.out.println(""+path+" ファイルが正常にダウンロードされました");
    }

    } catch (IOException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
    } 最後に {
    try {
    if (ftpClient.isConnected()) {
    //FTP
    ftpClient.logout();
    ftpClient.disconnect();
    }
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    }
    }
    このコードを実行すると、転送が成功したことが返されます:

    アップロードの開始
    プラグインとstyles.txtファイルが正常にダウンロードされました
    アップロードの開始
    1%
    2%
    3%
    .
    .
    97%
    98%
    98%
    99%
    99%
    100%
    1.wmaトラックファイルが正常にダウンロードされました