私はあなたのコードをチェックしました、それは動作します。ファイル タイプの宣言をバイナリに変更しただけで、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}/someDir
img_bis.png
あなたの問題に戻りましょう。
Util.getProductsXMLFTPUploadPath()
呼び出しから何が返されるかを確認してください
。私の推測では、それはあなたが期待しているものではないので、IDE でデバッグするか、コンソールに出力してください。
- 呼び出しから返されたパス
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!
これにより、ログイン後の現在の作業ディレクトリがわかります。
結果を投稿してください。