2

ftpサーバーにファイルをアップロードしようとすると、エラーが発生します。サーバーはリモートサーバーですが、ftpアクセスを提供します。これは私が使用しているコードです

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fileuploaddemo;

import org.apache.commons.net.ftp.FTPClient;
import java.io.FileInputStream;
import java.io.IOException;

public class FileUploadDemo {
public static void main(String[] args) {
    FTPClient client = new FTPClient();
    FileInputStream fis = null;

    try {
        client.connect("ftp.adress.comlu.com");
        client.login("username", "mypass");

        //
        // Create an InputStream of the file to be uploaded
        //
        String filename = "D:/xxx/screen0.png";
        fis = new FileInputStream(filename);

        //
        // Store file to server
        //
        client.storeFile(filename, fis);
        client.logout();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            client.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}

これがプログラム出力です。何もアップロードされず、私が取得するのはこれらの行だけです。

run:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.read(BufferedReader.java:175)
at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:479)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:552)
at org.apache.commons.net.ftp.FTP.port(FTP.java:877)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:709)
at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:565)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:557)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1795)
at fileuploaddemo.FileUploadDemo.main(FileUploadDemo.java:29)
BUILD SUCCESSFUL (total time: 1 second)

何が問題なのですか?

4

3 に答える 3

5

試す、

client.enterLocalPassiveMode()

転送を開始する前に。データ転送のためにPASVモードに入る必要があると思います。これは、ルーター(NAT)またはファイアウォールの背後にいる場合に発生する可能性があります。FTPサーバーは、デフォルトでデータ接続のために接続を試みます。つまり、あるポートでリッスンを開始し、サーバーを招待してデータを転送します。ただし、ファイアウォールまたはルーターの背後にいる場合、サーバーは直接接続できません。PASVモードは、FTPサーバーに転送用にサーバーのポートを開くように指示し、クライアントはそれに接続します。

于 2012-04-23T14:31:55.227 に答える
0

スタックトレースでは、ファイルがBINARYではなくTEXTとして転送されていることがわかります。これにより、ファイルが変更される可能性があり、NULなどを処理できません。

  client.type(FTP.BINARY_FILE_TYPE);

しかし、特に@Kalは正しいです。

于 2012-04-23T14:37:01.220 に答える
0

解決済み私は追加する必要がありました:netsh advfirewall set global StatefulFTP disable In command promp inadminrights。これは、WindowsマシンでのJava7のバグです。

于 2013-11-03T20:27:47.567 に答える