Apache commons-net FTP - 将文件上传到安全 FTP IIS

Posted

技术标签:

【中文标题】Apache commons-net FTP - 将文件上传到安全 FTP IIS【英文标题】:Apache commons-net FTP - uploading file to Secure FTP IIS 【发布时间】:2012-01-25 08:27:33 【问题描述】:

我正在尝试使用 Apache commons-net FTP 库将大文件 (>100Mb) 上传到 Secure FTP Server IIS。

这是我的代码:

try
ftpClient = new FTPSClient("TLS", false);
        this.ftpClient.setDataTimeout(6000000);
        this.ftpClient.setConnectTimeout(6000000);
        ftpClient.connect(host, port);
        ftpClient.login(userName, password);
            ftpClient.enterLocalPassiveMode();
         if (ftpClient.getReplyCode() == 230)
               ftpClient.sendCommand("OPTS UTF8 ON");
               ftpClient.execPBSZ(0);
               ftpClient.execPROT("P");
         else
             throw new Exception("connection failed.....");
         ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        InputStream is= new FileInputStream("C:\\movie.avi");
         ftpClient.setUseEPSVwithIPv4(true);
             ftpClient.storeFile(remotePath, is);
         is.close();
       
         catch (SocketException e) 
    e.printStackTrace();
         catch (IOException e) 
    e.printStackTrace();
        

无法上传大于 19Mb 的文件。 storeFile 方法抛出 IOException 和空的 StackTrace。下面可以看到IOException变量:

   e    CopyStreamException  (id=39)    
    cause   CopyStreamException  (id=39)    
    detailMessage   "IOException caught while copying." (id=45) 
    ioException SocketException  (id=46)    
        cause   SocketException  (id=46)    
        detailMessage   "Connection reset by peer: socket write error" (id=50)  
        stackTrace  null    
    stackTrace  null    
    totalBytesTransferred   19084288    

实际上它的行为方式如下:

1) 当我开始上传时,创建了零大小的文件,而我正在上传文件大小仍然为零,当异常发生时,这个空文件被 FTP 删除。

2) 有趣的是,FileZila 也无法上传这些文件,但其大小限制为 70Mb。

我错过了什么吗?

【问题讨论】:

FileZilla 和您的代码会在大约相同的时间后失败吗?您是否使用其他方式(命令行 FTP 客户端等)成功上传了比这更大的文件? 我尝试过超时,但它看起来一旦达到极限就会失败,在我的情况下它是 19 Mb。 【参考方案1】:

嗯。很遗憾,防火墙导致的问题,在 5 分钟超时后关闭了数据端口。

【讨论】:

以上是关于Apache commons-net FTP - 将文件上传到安全 FTP IIS的主要内容,如果未能解决你的问题,请参考以下文章

基于commons-net实现ftp创建文件夹上传下载功能.

apache FTP

ftp上传文件

使用 apache commons-net FTPClient 传输原始二进制文件?

maven中,POM.XML中怎么配置org.apache.commons.net.ftp引用包,求配置代码- -

commons-net 兼容 ssh-2.0 协议