• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:commons-netでのFTP送信について)

FTP送信できない場合の対処方法とは?

nknk80の回答

  • ベストアンサー
  • nknk80
  • ベストアンサー率65% (17/26)
回答No.1

fp.connect(...)の後に、 int reply = fp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ fp.disconnect(); //失敗 } という具合に応答コードの取得とそのチェックが 必要だと思います。 それから、たしかPASVモードにする場合には、 enterLocalPassiveMode()は必要ですが、 enterRemotePassiveMode()は不要だったと思います。 止まっている箇所は、各メソッドの戻り値を 調べればわかると思います。

関連するQ&A

  • 楽天GOLDのポート変更でFTP送信JAVAプログラムが動かなくなりました

    初めて投稿させていただきます。 この度、楽天GOLDのFTPのポートが21から16910に変更になるというアナウンスが届いたため、JavaのプログラムでFTP送信処理を行っていたロジックにポートを指定するように変更にしました。 またPASVモードを使用するように指定されていたため、使用するようにロジックを変更しました。 変更後はコネクションを張ってログインまではプログラム上で正常に動いているのですが、肝心のファイルを送信する箇所で失敗してしまいます。 FFFTPというツールでは新しいポートでも正常に動いているため、何が原因かわからず困っております。 どなたかJavaのFTP処理でお詳しい方いらしたらご教授お願い致します。 public static void main(String[] args) { FTPClient fp = new FTPClient(); String sever = "ftp.rakuten.ne.jp"; int port = 16910; String user = "*****"; String password = "******"; int timeout = 40000; String path = "/test/test.jpg"; FileInputStream is = null; try{ fp.enterLocalPassiveMode(); fp.connect(sever,port); if (!FTPReply.isPositiveCompletion(fp.getReplyCode())) { System.out.println("接続失敗!"); }else{ System.out.println("接続成功!"); } if (fp.login(user, password) == false) { System.out.println("ログイン失敗!"); }else{ System.out.println("ログイン成功!"); } fp.setFileType(FTP.BINARY_FILE_TYPE); fp.setSoTimeout(timeout); is = new FileInputStream("C:\\TEST\\test.jpg"); boolean boolFtp = fp.storeFile(path, is); if(boolFtp){ System.out.println("ファイル転送成功!"); }else{ System.out.println("ファイル転送失敗!" + fp.getReplyCode()); } }catch(Exception e){ System.out.println("例外発生!"); } }

    • ベストアンサー
    • Java
  • jacarta commonsの使い方

    JavaでFTPサーバに接続してファイル情報のリストを取得したいのですが、 以下のソースだとエラーが起きてしまいます。 原因がさっぱり解らないのでご教示願います。 /** * */ package test.components; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.io.FileUtils; /** * @author 綿貫 隆夫 * <pre> * FTPClientのテスト * </pre> */ public class ftpClientTest { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO 自動生成されたメソッド・スタブ FTPClient fp = new FTPClient(); try { fp.connect("61.214.209.83"); if (!FTPReply.isPositiveCompletion(fp.getReplyCode())) { // コネクトできたか? System.out.println("connection failed"); System.exit(1); // 異常終了 } else { System.out.println("connecction sucssesfull"); } if (fp.login("vms", "vms123") == false) { // ログインできたか? System.out.println("login failed"); System.exit(1); // 異常終了 } else { System.out.println("login sucssesfull"); } /* // ファイル受信 os = new FileOutputStream("c:/tmp/aaa.txt");// クライアント側 fp.retrieveFile("/home/searchman/bbb.txt", os);// サーバー側 os.close(); System.out.println("FTP GET COMPLETED"); // ファイル送信 is = new FileInputStream("c:/tmp/aaa.txt");// クライアント側 fp.storeFile("/home/searchman/ccc.txt", is);// サーバー側 is.close(); System.out.println("FTP PUT COMPLETED"); */ String[] flist = fp.listNames("."); for(int i=0; i<flist.length; i++) { System.out.println(flist[i]); } FTPFile [] ftpFiles = fp.listFiles("."); for ( int i=0; i<ftpFiles.length; i++) { // Check if FTPFile is a regular file if ( ftpFiles[i].getType () == FTPFile.FILE_TYPE ) { System.out.println ( "FTPFile: " + ftpFiles[i].getName () + "; " + FileUtils.byteCountToDisplaySize ( ftpFiles[i].getSize ())) ; } } } catch (Exception e) { e.printStackTrace(); } finally { fp.disconnect(); } } } よろしくお願いします。

    • ベストアンサー
    • Java
  • ftpがうまく、動いていません。

    以下のようにPHP書きましたが Cドライブ直下に index.htmlができません。 エラーもでません。 何故でしょうか? 迷宮いりです。。。 ---------- $host = "ftp.dp○○○.lolipop.jp"; $user = "lolipop.jp-dp○○○"; $pass = "○○○"; $port = "21"; $timeout = "90"; // ファイルのパス $local_path = "C:\\index.html"; $remote_path = "index.html"; // HOSTに接続 $con = ftp_connect( $host, $port, $timeout ); // ログイン ftp_login( $con, $user, $pass ); ftp_pasv($con, true); // ファイルダウンロード ftp_get( $con, $local_path, $remote_path, FTP_BINARY ); ftp_close( $con );

    • 締切済み
    • PHP
  • commons-net-2.0の使用が出来ない

    commons-net-2.0の使用が出来ない javaでFTP接続をしようとし、とあるサイトの説明を見ながらやったのですが (1)Commons Netのダウンロードページからバイナリーのアーカイブをダウンロードする。(commons-net-2.0.zip) はい、まず「commons-net-2.0.zip」というのをダウンロードしました。 (2)適当な場所にアーカイブを展開する。 展開はされるのですが、最後の最後に 「commons-net-2.0¥commons-net-2.0-javadoc.jar」 - 正常に解凍でいません。CRCが一致しないか、出力先ファイルが使用中です。 と、出ます。原因がよくわかりません。 (3)展開したディレクトリーの「commons-net-2.0」の直下にあるcommons-net-2.0.jarを適当な場所にコピーする。 まず、「commons-net-2.0」の直下にcommons-net-2.0.jarというものがありません。 commons-net-2.0-javadoc.jarというものならあるのですが・・・。 なので、「commons-net-2.0-javadoc.jar」というのを外部jarの追加をしたのですが、 ソース中に「import org.apache.commons.net.ftp.FTPClient;」とやってもエラーがでて使用できません。 他に、「commons-net-2.0.zip」を「commons-net-2.0.jar」と、拡張子を変えて、 この「commons-net-2.0.jar」をクラスパスの設定で外部jar追加したけどやっぱりだめでした。 かれこれ3時間以上格闘してるのですが、さっぱりです。 どうか、 「commons-net-2.0.jar」を追加し、 「FTPClient ftpClient = new FTPClient();」 ↑これを使えるようにできるにはどうしたらいいかご教授願えないでしょうか? jarの追加とかクラスパスの追加に関して疎いもので・・・。 (ちなみにsun.net.ftp.FtpClient;の方は使う気はありません)

    • ベストアンサー
    • Java
  • 日本語ファイル名のFTPについて

    お世話になります。 日本語ファイル名のFTPを行っているのですが、ファイル名が文字化けして困っております。 解決策をご存知の方が、いらっしゃいましたら解決するための情報を頂けますでしょうか。 私が、使用しているのは、以下の環境となります。 【サーバ環境(FTP元、FTP先ともに同様となります。】 centOS5.5. jdk1.6 ftpを行う際、以下のようにして文字コード、転送モードを指定しております。 fp.setFileType(FTPClient.BINARY_FILE_TYPE); fp.setControlEncoding("UTF-8"); // ファイル送信 is = new FileInputStream(clientFilePath);// クライアント側 fp.storeFile(putFilePath, is);// サーバー側 String putFileNm = new File(putFilePath).getName(); String parentPath = new File(putFilePath).getParent(); String[] flist = fp.listNames(parentPath); for(int i=0; i<flist.length; i++) { if(putFileNm.equals(new File(flist[i]).getName())){ return true; } } FTP元、FTP先のサーバの文字コードも echo $LANGで確認しましたが、両方とも「ja_JP.UTF-8」になっております。 お手数お掛け致しますが、ご教授の程よろしくお願い致します。 以上、よろしくお願い致します。

    • ベストアンサー
    • Java
  • CGIでFTPファイル送信・受信がしたい

    CGIでファイル送信・受信を行いたいと考えてます。 言語は PERL で Net::FTP を利用しようと思ってます。 ローカルで実行するとファイル送信・受信できるのですが。。。。。 サーバにスクリプトを置いてブラウザから実行すると500のエラーが出ます。 自分的には手詰まりの状態です。 大きなファイルが送受信できるようなものを探しています。 なにか参考にできるサイトはございませんでしょうか? よろしくお願いいたします。 #!/usr/bin/perl use strict; use Net::FTP; use CGI; my $host = "my.host.com"; my $user = "user"; my $pass = "pass"; my $remote_file = "/home/test1/remote.txt"; my $local_file = "/tmp/local.txt"; my $q = CGI->new(); my $ftp = Net::FTP->new($host) or die "can not connection: $@"; $ftp->login($user, $pass) or die $ftp->message; $ftp->binary; $ftp->get($remote_file, $local_file) or warn $ftp->message; $ftp->quit; print $q->header( -type=>'text/html', -charset=>'UTF-8', ); print <<"END_OF_HTML"; <body><p>done.</p></body> END_OF_HTML exit;

  • PEAR Net_FTP put利用方法

    いつもお世話になっております。 PHP PEAR Net_FTPを利用してファイルをputするサンプルプログラムを作ろうと 以下のようなサンプルを作りました。 <?php require_once("Net/FTP.php"); $ftp =& new Net_FTP(); var_dump($ftp->connect("ipaddress","21")); //var_dump($ftp->login("","")); //var_dump($ftp->setPassive()); //var_dump($ftp->cd("/")); //echo $ftp->pwd(); //echo "\r\n"; var_dump($ftp->put("/home/a/aaa.txt","aaa.txt",false,FTP_BINARY)); // 接続の切断 $ftp->disconnect(); ?> しかし、 File '/home/a/aaa.txt' could not be uploaded to '/aaa.txt' となってしまい、アップロードできません。 ネットのサンプルを見ると、connectの後、loginするのが通例なのですが、 今回のFTPサーバーは認証をつけていないので、その部分の処理を行いませんでした。 /home/a/aaa.txtファイルは存在し、 FTPサーバー側の権限設定も特になく、アクセスできる状態にあります。 ほかに cd("/") を行ってみたのですが、 Directory change failed というエラーになってしまいました。 pwd() も行ってみたのですが、 Could not determine the actual path. となってしまいました。 connectはtrueを返しているので、接続はできていると思うのですが、 何か不足している手順等があるのでしょうか。 環境は PHP Version => 5.2.12 FTPサーバーは IIS バージョン6.1(ビルド 7601 SP 1)です どなたかご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでftp送信 さくらレンタルサーバ cron

    さくらレンタルサーバの cronで、phpを実行し、他サーバのFTPサーバ(PASSIVE)が使えないへ、アップロードするphpのPGで悩んでいます。 さくらレンタルサーバは、通常のftp関数が使えなかったので、「PHP FTP Client Class By TOMO」さんのソケットでFTP送信を行うクラスを使用して、PASSIVEモードで実装、テスト環境・成功するところまでは行けたのですが、相手方のサーバ仕様が使えないことが判明し、アクティブモードに書きかえるところで、悩んでいます。 // 接続を確立する $ftp = new ftp(); $ftp->debug = TRUE;//デバグモード if (!$ftp->ftp_connect($ftp_server)) { die("Cannot connect\n"); print "Cannot connect\n"; exit; } // ユーザ名とパスワードでログインする if (!$ftp->ftp_login($ftp_user_name, $ftp_user_pass)) { $ftp->ftp_quit(); die("Login failed\n"); print "Login failed\n"; exit; } ここから先、どのように書けばよいのやら。 そもそもさくらレンタルサーバのFTPはPASSIVEなので、アクティブ送信できないのでしょうか? 何からしてよいものやら時間がないので焦ってます!

    • ベストアンサー
    • PHP
  • pythonでFTPを使ってファイルアップできない

    pythonで写真ファイルを指定したサーバーにFTPアップをしたいと思っています。 rasabarry piで動かしていますが、実行すると、一定時間固まってしまって終わってしまいます。サーバーを見てもファイルがアップされていません。 何か考えられることはありますでしょうか?ファイルはjpgファイルとなります。 下記にソースを明記します。 # -*- coding: utf-8 -*- import ftplib def main(): ftp = ftplib.FTP("xxx.xxx.xxx") ftp.set_pasv("true") ftp.login("user", "password") fp = open("test.jpg", 'rb') ftp.storbinary("STOR /sample/test.jpg",fp) ftp.close() fp.close() if __name__=='__main__': main()

  • Java[ cooomons-net ]で xlsファイルをFTP転送

    いつもお世話になっております。 http://www.searchman.info/tips/2640.html この度上記のサイトを参考に、cooomons-netというものを使用し JAVAでFTP転送を試みました。 そこでtxtファイルの場合は正常に転送されます。 しかし、xlsファイルの場合は正常に転送されている (エラーが出ずに、送信元ファイルとサイズも同じ)のですが、 "ファイルが破損している"と出て正常に開く事が出来ません。 これはどうしてなのでしょうか。 送信元のファイルはちゃんと開く事が出来るファイルです。 -------------------------------------------------------------- 基本的に上記サイトのサンプルのままで、ファイル送信部分のtxtファイルをxlsファイルに変更しています。 // ファイル送信 is = new FileInputStream("c:/tmp/test.xls");// クライアント側 fp.storeFile("/home/searchman/test.xls", is);// サーバー側 is.close(); --------------------------------------------------------------

    • ベストアンサー
    • Java