0

次のコードを使用して、xmlファイルをサーバーのディレクトリ/ home / domainname / public_html/guestにアップロードしています。ただし、ファイルは場所/ home/domainnameにのみアップロードされます。子ディレクトリにはアップロードされません。お知らせ下さい。

FTPClientクライアント=新しいFTPClient(); FileInputStream fis = null;

    try {
        client.connect(Util.getProductsXMLFTPServer());
        client.login(Util.getProductsXMLFTPUser(), Util.getProductsXMLFTPPassword());

        //
        // Create an InputStream of the file to be uploaded
        //

        fis = new FileInputStream(new File(Util.getProductsXMLFTPInputFilePath(), Util.getProductsXMLFTPOutputFileName()));
        client.changeWorkingDirectory(Util.getProductsXMLFTPUploadPath());


        client.storeFile(Util.getProductsXMLFTPOutputFileName(), fis);
        client.logout();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            client.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
4

2 に答える 2

2

私はあなたのコードをチェックしました、それは動作します。ファイル タイプの宣言をバイナリに変更しただけで、XML ファイルには不要な場合があります。参照用の完全なコードは次のとおりです。

package apachenet.ftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class App {
    public static void main( String[] args ) {
        FTPClient client = new FTPClient(); 
        FileInputStream fis = null;
        try {
            client.connect(/*Util.getProductsXMLFTPServer()*/"127.0.0.1");
            client.login(/*Util.getProductsXMLFTPUser()*/"pwyrwinski", 
                    /*Util.getProductsXMLFTPPassword()*/"secret");
            client.setFileType(FTP.BINARY_FILE_TYPE); // optional
            fis = new FileInputStream(
                    new File(/* Util.getProductsXMLFTPInputFilePath() */"/home/pwyrwinski", 
                            /* Util.getProductsXMLFTPOutputFileName() */"img.png"));
            client.changeWorkingDirectory(/*Util.getProductsXMLFTPUploadPath()*/ "someDir");


            client.storeFile(/*Util.getProductsXMLFTPOutputFileName()*/"img_bis.png", fis);
            client.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                client.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

ご覧のとおり、あなたのものとほぼ同じです。 Utilクラス呼び出しは生データに置き換えられます。

実行すると、ファイルは に変更された名前で ftp サーバーのディレクトリに/home/pwyrwinski/img.pngアップロードされました。これはまさにあなたが達成したかったことだと思います。{FTP_USER_ROOT}/someDirimg_bis.png

あなたの問題に戻りましょう。

  1. Util.getProductsXMLFTPUploadPath()呼び出しから何が返されるかを確認してください 。私の推測では、それはあなたが期待しているものではないので、IDE でデバッグするか、コンソールに出力してください。
  2. 呼び出しから返されたパスUtil.getProductsXMLFTPUploadPath() がスラッシュで始まるかどうかを確認してください。そうすべきではありません。

更新 1. ディレクトリ/home/domainname/public_html/guestはサーバー上に存在しますか?

クラスに次のメソッドを追加します。

private static void showServerReply(FTPClient ftpClient) {
    String[] replies = ftpClient.getReplyStrings();
    if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
        }
    }
}

そして、すべての ftp-client のメソッド呼び出しの後に呼び出します。これにより、すべてのコマンド結果のコードと説明が得られます。client.changeWorkingDirectory(...)エラーで終わると思われます。おそらく: 550 Permission Denied (or No such file or folder).

次の変更は次のとおりです。

client.login(Util.getProductsXMLFTPUser(), Util.getProductsXMLFTPPassword());
System.out.println(client.printWorkingDirectory()); // added this line!

これにより、ログイン後の現在の作業ディレクトリがわかります。

結果を投稿してください。

于 2013-03-02T21:05:09.160 に答える
1
FTPClient ftpClient = new FTPClient();
        try {
              System.out.println("before server connection");
            ftpClient.connect(server, port);
            System.out.println("before user name and passwod");
            ftpClient.login(user, pass);
            ftpClient.enterLocalActiveMode();

            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            System.out.println("connection sucess");


            // windows working fine
            File secondLocalFile = new File("/home/aims/archived_reports/tes_S_000000123/test.pdf");
//            String secondRemoteFile = "/archived_reports/PermanentRecord.pdf";

//linux
          //  File secondLocalFile = new File("/archived_reports/tes_S_000009123/test.pdf");

            String secondRemoteFile = "remotefilename.pdf";
            InputStream  inputStream = new FileInputStream(secondLocalFile);

            System.out.println("Start uploading second file");

                    ftpClient.changeWorkingDirectory("/reports");// home/ftp.test/reports folder


          System.out.println("Prasent Working Directory :"+ftpClient.printWorkingDirectory());


            OutputStream outputStream = ftpClient.storeFileStream(secondRemoteFile);
                 int returnCode = ftpClient.getReplyCode();
                 System.out.println(returnCode);
            byte[] bytesIn = new byte[4096];
            int read = 1;

            while ((read = inputStream.read(bytesIn)) != -1) {
                outputStream.write(bytesIn, 0, read);
            }

System.out.println();           
            inputStream.close();
            outputStream.close();
                     boolean completed = ftpClient.completePendingCommand();
            if (completed) {
                System.out.println("The second file is uploaded successfully.");
            }
于 2013-05-17T07:13:33.090 に答える