【问题标题】:Error on uploading file in java to ftp server将java中的文件上传到ftp服务器时出错
【发布时间】:2012-04-23 14:13:48
【问题描述】:

当我尝试将文件上传到 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)

可能是什么问题?

【问题讨论】:

    标签: java file-upload image-upload java-server


    【解决方案1】:

    试试,

    client.enterLocalPassiveMode()
    

    在您开始转移之前。我怀疑您需要进入 PASV 模式才能进行数据传输。如果您位于路由器 (NAT) 或防火墙后面,就会发生这种情况。默认情况下,FTP 服务器会尝试连接到您进行数据连接,这意味着您开始侦听某个端口并邀请服务器连接到它以进行数据传输。但是如果您在防火墙或路由器后面,服务器将无法直接连接到您。 PASV 模式指示 FTP 服务器改为在服务器上打开一个端口进行传输,然后客户端连接到该端口。

    【讨论】:

    • 我在尝试将文件存储在服务器上之前添加了该行,现在它说 java.net.SocketException: Connection reset
    • 我认为需要在调用 connect 之前调用它。尝试检查 javadoc commons.apache.org/net/api-3.1/org/apache/commons/net/ftp/…
    • @Karuvägistaja 你能发布新的例外吗?你在防火墙后面吗?
    • 已解决我必须添加:netsh advfirewall set global StatefulFTP disable In command promp in admin rights。这是 Windows 机器上的 Java 7 错误。
    • @Karuvägistaja 我认为您应该在回答中提及您的评论,因为使用此命令也解决了我的问题。如果您将您的评论作为您的答案,这将对其他用户非常有帮助。顺便说一句,谢谢。
    【解决方案2】:

    在堆栈跟踪中,可以看到文件以 TEXT 而不是 BINARY 传输,这可能会改变文件,并且无法处理 NUL 等。

      client.type(FTP.BINARY_FILE_TYPE);
    

    但尤其是@Kal 是对的。

    【讨论】:

    • 它说找不到变量 FTP 并且 Kal 的解决方案没有改变任何东西。
    • 您可以使用 FTPClient.BINARY_FILE_TYPE。类 FTPClient 扩展了定义常量的 FTP。抱歉,Kal 的解决方案不起作用;这听起来很合理,因为您的代码看起来不错。
    • 已解决我必须添加:netsh advfirewall set global StatefulFTP disable In command promp in admin rights。这是 Windows 机器上的 Java 7 错误
    【解决方案3】:

    解决了我必须添加:netsh advfirewall set global StatefulFTP disable In command promp in admin rights。这是 Windows 机器上的 Java 7 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      相关资源
      最近更新 更多