解决FTPClient上传文件为空,显示0字节

摘要:
JAVA使用FTPClient上传文件时总是为空,而使用FileZilla客户端时却不会。在JAVA中将FTPClient设置为被动模式即可解决问题。importorg.apache.commons.net.ftp.FTP;importorg.apache.commons.net.ftp.FTPClient;importjava.io.File;importjava.io.FileInputStream;/***CreatedbyAdministratoron2018/4/13.*/publicclassFtpUtil{publicvoidtestFTPClient()throwsException{try{//创建一个FTPClient对象FTPClientftpClient=newFTPClient();//创建ftp链接ftpClient.connect;//登录ftp,使用用戶名和密碼ftpClient.login;//读取本地文件FileInputStreaminputStream=newFileInputStream;//设置为被动模式ftpClient.enterLocalPassiveMode();//设置上传路径ftpClient.changeWorkingDirectory;//修改上传文件格式ftpClient.setFileType;System.out.println("1");//上传文件ftpClient.storeFile;System.out.println("2");//关闭链接ftpClient.logout();}catch{e.printStackTrace();throwe;}}}补充:调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,ftpclient告诉ftpserver开通一个端口来传输数据。

JAVA使用FTPClient上传文件时总是为空,而使用FileZilla客户端时却不会。

后来查了下资料,FTP服务器有被动模式和主动模式。(具体查另外资料)

在JAVA中将FTPClient设置为被动模式即可解决问题。

解决FTPClient上传文件为空,显示0字节第1张

importorg.apache.commons.net.ftp.FTP;
importorg.apache.commons.net.ftp.FTPClient;
importjava.io.File;
importjava.io.FileInputStream;
/**
 * Created by Administrator on 2018/4/13.
 */
public classFtpUtil {
    public void testFTPClient() throwsException {
        try{
            //创建一个FTPClient对象
            FTPClient ftpClient = newFTPClient();
            //创建ftp链接
            ftpClient.connect("***.***.***.***", 21);
            //登录ftp,使用用戶名和密碼
            ftpClient.login("****", "****");
            //读取本地文件
            FileInputStream inputStream = new FileInputStream(new File("filePath"));
            //设置为被动模式(如上传文件夹成功,不能上传文件,注释这行,否则报错refused:connect  )
            ftpClient.enterLocalPassiveMode();
            //设置上传路径
            ftpClient.changeWorkingDirectory("FTP服务器文件目录");
            //修改上传文件格式
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            System.out.println("1");
            //上传文件
            ftpClient.storeFile("hello1.jpg", inputStream);
            System.out.println("2");
            //关闭链接
ftpClient.logout();
        } catch(Exception e) {
            e.printStackTrace();
            throwe;
        }
    }
}

补充:

调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。

到此问题圆满解决!

免责声明:文章转载自《解决FTPClient上传文件为空,显示0字节》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python FLask Web 学习笔记:jinjia2的使用方法1微软正则表达式工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FTP 文件传输协议技术详解

FTP(File Transfer Protocol)在 TCP/IP 协议族中属于应用层协议,是文件传输标准。 主要功能是向用户提供本地和远程主机之间的文件传输,尤其在进行版本升级、日志下载和配置保存等业务操作时,广泛地使用 FTP 功能。FTP 协议基于相应的文件系统实现。 FTP 采用 C/S(Client/Server)结构,如图 所示。 F...

如何打开和关闭端口

每一项服务都对应相应的端口,比如众如周知的WWW服务的端口是80,smtp是25,ftp是21,win2000安装中默认的都是这些服务开启的。对于个人用户来说确实没有必要,关掉端口也就是关闭无用的服务。 “控制面板”的“管理工具”中的“服务”中来配置。 1、关闭7.9等等端口:关闭Simple TCPIP Service,支持以下 TCPIP 服务:Ch...

转 在shell脚本中使用expect实现scp传输问题

1.安装expect expect用于shell脚本中自动交互,其是基于tcl编程语言的工具。所以安装expect首先安装tcl。本文中使用的是expect5.45和tcl8.6.6。 安装tcl [root@tseg0 /]$ mkdir /tools [root@tseg0 /]$ tar -zxvf tcl8.6.6-src.tar.gz [roo...

WinInet中的FTP操作

研究了一下Wininet在ftp中的应用,感觉比http应用要简单些。 项目设置方面,Wininet.h和Wininet.lib都必须加入。 假设ftp地址为10.1.1.1,账号和密码都为hello。 为简单起见,使用同步模式: HINTERNET hInstance;HINTERNET hConnect;hInstance = InternetOpen...

GitHub建立个人Maven仓库

Maven 官网:https://maven.apache.org/repository/index.html 一、配置github 设置登录名name 在github的个人设置中,设置好自己的姓名 。这个环节很重要,若不设置姓名,会出现一些一些意想不到的错误。maven的setting中的配置文件用户名都用这个。 二、生成maven包到本地 修改pom...

一个具体的列子:vc操作ftp

一个ftp操作的例子: /**//*9/**//*46/**//*86/**//*112/**//*151{156::EnterCriticalSection(&m_rCriticalSection);157if(m_pInetSession==NULL)158m_pInetSession=newCInternetSession(AfxGetAp...