[root@localhost ~]# yum -y install vsftpd
此用户就是用来登录ftp服务器用的。
[root@localhost ~]# useradd ftpuser
这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为 /home/ftpuser。
[root@localhost ~]# passwd ftpuser
输入两次密码后修改密码。
因为ftp默认的端口为21,而centos默认是没有开启的。
centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
firewall-cmd --zone=public --add-port=80/tcp --permanent
返回success为成功。
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效
[root@localhost ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
查看已开放的端口
[root@localhost ~]# firewall-cmd --list-ports
外网是可以访问上去了,可是发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,因为selinux作怪了。
修改selinux:
执行以下命令查看状态:
[root@localhost ~]# getsebool -a | grep ftp
PS:我的是修改过后的,可能和你的不一样。
执行上面命令,再返回的结果看到两行都是off,代表,没有开启外网的访问
[root@localhost ~]# setsebool -P allow_ftpd_full_access on
[root@localhost ~]# setsebool -P tftp_home_dir on
用FileZilla 测试,发现能成功登陆,但是目录读取不了,我们更换一下传输模式。
FileZilla的主动、被动模式修改:
菜单:编辑→设置
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
修改/etc/vsftpd/vsftpd.conf文件:
保存:wq,然后回车退出。
[root@localhost ~]# service vsftpd restart
默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上
pasv_min_port=30000
pasv_max_port=30999
表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd。
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
[root@localhost ~]# service vsftpd restart
由于指定这段端口范围,firewall也要把响应的端口打开。
[root@localhost ~]# firewall-cmd --zone=public --add-port=30000-30999/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
查看:
[root@localhost ~]# firewall-cmd --list-ports
发现有30000-30999/tcp就搞定了。
[root@localhost ~]# chkconfig vsftpd on
将FileZilla的FTP传输模式更改为被动模式,然后连接,发现可以进去了。
地址栏输入:ftp://服务器地址
在之后的弹出框中输入你的账户和密码。
创建程序,ftp需要依赖commons-net-3.3.jar包
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class TestFTP {
public static void main(String[] args) throws Exception, IOException {
FTPClient ftpClient = new FTPClient();
ftpClient.connect("192.168.195.138");
ftpClient.login("ftpuser", "123456");
FileInputStream inputStream = new FileInputStream(new File("E:\\taotao\\21.jpg"));
//指定上传目录
//ftpClient.changeWorkingDirectory("/home/ftpuser/images/");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.storeFile("123.jpg",inputStream);
inputStream.close();
if(ftpClient.logout()){
System.out.println("成功!");
}else{
System.out.println("失败!");
}
}
}
控制台打印成功之后,查看我们的服务器,会发现123.jpg这张图片。