1、虚拟机安装VSFTP服务
- 安装vsftpd组件
yum -y install vsftpd
配置文件位于/etc/vsftpd/vsftpd.conf
- 添加Linux用户
此用户用于登录ftp服务器
useradd ftpuser
这时会在/home 目录下创建一个目录ftpuser - 给用户设置密码
password ftpuser
输入密码 - 防火墙开启21端口
因为 ftp 默认的端口为 21,而 centos 默认是没有开启的
所以要修改 iptables 文件vim /etc/sysconfig/iptables
在行上面有 22 -j ACCEPT 下面另起一行输入跟那行差不多的,只是把 22 换成 21,然后:wq 保存。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
- 重启 iptables
service iptables restart - 修改selunux
外网是可以访问上去了,可是发现没法返回目录(使用 ftp 的主动模式,被动模式还是无法访问),也上传不了,因为 selinux 作怪了。修改 selinux:执行以下命令查看状态:
[root@bogon ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
执行上面命令,再返回的结果看到两行都是 off,代表没有开启外网的访问
[root@bogon ~]# setsebool -P allow_ftpd_full_access on
[root@bogon ~]# setsebool -P ftp_home_dir on - 关闭匿名访问
修改配置vsftpd文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
改为
anonymous_enable=NO - 重启 vsftpd ftp服务
service vsftpd restart - 设置开启启动ftp服务
chkconfig vsftpd on
2、图片上传
2.1 使用 FileZilla 上传图片
2.2 使用 FTP 协议访问图片服务器
FTP 协议的 URL 格式:
ftp://username:userpassword@IP/路径/图片名称
2.3 FTPClient 工具
FTPClient 是 Apache 提供的一个开源的基于 JAVA 语言的 FTP 客户端工具。FTPClient 位于 Apache 的 commons-net 项目中。
2.3.1 FTPClient的使用
pom.xml中加入:
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
</dependencies>
测试代码:
//创建FTPClient对象
FTPClient ftp = new FTPClient();
//连接服务器
ftp.connect("host", port);
//登录。用户名名和密码
ftp.login("username", "password");
//上传的文件
InputStream is = new FileInputStream(sourece);
//指定上传路径
ftp.changeWorkingDirectory(path);
//开启字节流传输
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
//文件上传
ftp.storeFile(filename, is);
//退出登录
ftp.logout();
System.out.println("ok");