使用Java将图片上传到虚拟机CentOS7系统中的FTP服务器中,再通过Nginx访问图片。
需要现在CentOS7系统中安装Nginx:
CentOS7系统;Nginx安装;vsftpd服务安装;
1. 安装vsftpd组件
# yum -y install vsftpd
1.1 启动ftp
# systemctl start vsftpd.service
1.2 开放防火墙的21端口(ftp默认21端口)
# firewall-cmd --zone=public --add-port=21/tcp --permanent
zone->作用域
port->增加的端口/传输协议
permanent->有效期,不设置permanent的话系统重启该端口就失效
1.3 重新加载防火墙
重新加载防火墙:
# firewall-cmd --reload
显示以开放的端口:
# firewall-cmd --list-ports
2. 配置vsftpd.conf文件
对以下地方进行修改:
# vi /etc/vsftpd/vsftpd.conf
2.1 关闭匿名用户
使匿名用户不能登录,修改文件中的
anonymous_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
2.2 开启PASV(被动模式)
在 /etc/vsftpd/vsftpd.conf 的最下面加入
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999(每次文件传输都是随机打开端口,防火墙也需要同时打开对应的端口)
保存退出后,重新启动vsftpd:
# systemctl restart vsftpd.service
开启防火墙30000-30999端口:
# firewall-cmd --zone=public --add-port=30000-30999/tcp --permanent
# firewall-cmd --reload
3. 查看ftp的状态
# getsebool -a|grep ftp
显示结果:
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
修改红色的地方为on:
# setsebool -P ftpd_full_access on
# setsebool -P tftp_home_dir on
4. Java代码
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.junit.Test;
public class FTPTest {
@Test
public void testFtpClient() throws Exception{
// 创建一个FtpClient对象
FTPClient ftpClient = new FTPClient();
// 创建ftp连接,默认21端口
ftpClient.connect("***.***.***.***", 21);
// 登录ftp服务器,使用用户名和密码
ftpClient.login("ftpuser", "******");
// 上传文件
// 读取本地文件
FileInputStream inputStream = new FileInputStream(new File("D:\\eclipse\\2.jpg"));
// 被动模式:服务端开放端口给客户端用
ftpClient.enterLocalPassiveMode();
// 设置上传的路径
ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
// 修改上传文件的格式,采用二进制的方式
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//(服务器文档名,上传文档的inputStream)
ftpClient.storeFile("2.jpg", inputStream);
// 关闭连接
ftpClient.logout();
}
}