搭建一个Nginx+vsftpd图片服务器,通过Nginx提供http服务,对图片url进行访问。vsftpd提供上传图片功能。 实现浏览器端上传图片,使用springmvc并得到图片的url(使用UUID生成随机图片名,防止重名),在浏览器访问图片url,展示图片。
1. Vsftpd 简介与安装
vsftpd是linux类操作系统上运行的ftp服务器软件,提供了ftp传输协议,可用于文件的上传、下载。可用apache的工具包commons.net提供的FTPclient客户端对文件进行上传下载。
支持在线安装。安装参考https://blog.csdn.net/Monstar_hu/article/details/80459468。
vsftpd 注意的点:我在linux上添加了一个用户,ftpuser,需要增加ftpuser对于/home/ftpuser的权限,否则无法在客户端创建文件,并实现基于日期保存较多的图片。
chown -R ftpuser:ftpuser /home/ftpuser
2. Nginx简介与安装
Nginx是一款轻量级的Http服务器和方向代理服务器,可实现反向代理和负载均衡。
Nginx 参考https://blog.csdn.net/yougoule/article/details/78186138,我不是参考此篇文章,但步骤都一样。默认端口是80,能出现如下画面,即安装成功。
Nginx安装成功画面:
3. ftp上传文件测试
可以用FileZilla和java代码测试上传图片
FileZilla登录后能看到如下界面,并可拖动上传图片,表示vsftpd安装成功。
用Java代码测试,使用Apache的工具包commons.net,版本3.5。里面包含FTPClient类,可实现ftp的上传。
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.junit.Test;
public class FtpTest {
@Test
public void testFtp() throws Exception {
//1、连接ftp服务器
FTPClient ftpClient = new FTPClient();
ftpClient.connect("192.168.235.101", 21);
//2、登录ftp服务器
ftpClient.login("ftpuser", "ftpuser");
//3、读取本地文件
FileInputStream inputStream = new FileInputStream(new File("E:\\ftptest\\ftptest1.jpg"));
//4、上传文件
//1)指定上传目录
ftpClient.changeWorkingDirectory("/home/ftpuser/ftpexample/images");
//2)指定文件类型
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//第一个参数:文件在远程服务器的名称
//第二个参数:文件流
ftpClient.storeFile("ftptest1.jpg", inputStream);
//5、退出登录
ftpClient.logout();
}
}
上传成功
4. Nginx实现对图片的访问和回显测试
先对Nginx的配置文件进行配置,指定Nginx的root目录。vim /usr/local/nginx/nginx.conf对nginx.conf进行编辑。修改root目录。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /home/ftpuser/ftpexample;
index in