在linux上基于nginx+ftp部署文件图片服务器

前言

最近自己在搞一个商城系统,因为以前没接触过,所有东西都是自己一点一点摸索,遇到了很多问题,慢慢慢的也都解决了,这一次遇到问题的是,我需要将商品图片和详情页的图片上传到图片服务器保存,这样的话商城前端做负载均衡的时候就不会无法访问图片了。

我也是在网上找了很久,网上都是复制粘贴,连符号都不改的那种,看着真的很无语,没办法了,只有自己搞吧。

言归正传

我是在linux服务器上基于nginx做的,至于为什么不选择用Tomcat,大家可以去查一下,Tomcat是有访问限制的,所以最好还是用nginx。

准备

1.找一台linux服务器,或者自己安装一台,不会安装的可以借鉴一下我另一篇文章(安装linux教程.)

2.安装nginx;
3.给服务器绑定一个域名

配置nginx

打开nginx配置文件
在这里插入图片描述
我这个是linux 软件商店安装的

创建一个新的.conf文件


server {
    listen       80;
    server_name  test.test.com;
    charset utf-8;
 
    location /images {
	    expires 24h;
	    root /home/;#指定图片存放路径
	    access_log /home/images/logs/images.log;#图片日志路径
	    proxy_store on;
	    proxy_store_access user:rw group:rw all:rw;
	    proxy_temp_path         /home/;#代理临时路径
	    proxy_redirect          off;
	    proxy_set_header        Host 127.0.0.1;
	    proxy_set_header        X-Real-IP $remote_addr;
	    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
	    client_max_body_size    10m;
	    client_body_buffer_size 1280k;
	    proxy_connect_timeout   900;
	    proxy_send_timeout      900;
	    proxy_read_timeout      900;
	    proxy_buffer_size       40k;
	    proxy_buffers           40 320k;
	    proxy_busy_buffers_size 640k;
	    proxy_temp_file_write_size 640k;
	}	
}

上面是我的配置文件

注意:
在保存配置文件之前,需要去指定位置先创建好文件夹以及文件,否则保存配置文件会报错。
在这里插入图片描述
在这里要注意一下,我配置的root 目录是/home/,location 是/images;

root 配置的意思是,会在root配置的目录后跟上URL,组成对应的文件路径。

意思就是我们在浏览器输入的这个地址实际访问的是

/home/images/

会把我们的location后面的 /images拼到实际访问的路径之后

所以,不要以为图片可以直接放在home目录下。

当然,如果你认为这样不方便查看或者担心出错,也可以修改一下root,将root改为alias

也就是 alias /home/images/
在这里插入图片描述
在浏览器中输入:http://test.test.com/images/1.jpg 就可以访问图片了

总结

root响应的路径:配置的路径(root指向的路径)+完整访问路径(location的路径)+静态文件

alias响应的路径:配置路径+静态文件(去除location中配置的路径)

ftp的安装:

1.安装

因为我用的是宝塔面板,在软件商店里可以找到FTP空间。
在这里插入图片描述
安装之后在这里就可以打开了
在这里插入图片描述
2.配置账号地址
在这里插入图片描述
在这里插入图片描述
这里的根目录就填我们上面配置nginx的那个地址:/home/images/

系统对接通过FTP上传到服务器

1.引入jar

<!--FTP包-->
<dependency>
	<groupId>commons-net</groupId>
	<artifactId>commons-net</artifactId>
	<version>3.5</version>
</dependency>

2.创建工具类
因为我是保存商品图片和详情页图片,这些图片都存在修改删除,所以我整理了两个方法,一个是上传,一个是删除

上传:

/** 
	 * Description: 向FTP服务器上传文件 
	 * @param host FTP服务器hostname 
	 * @param port FTP服务器端口 
	 * @param username FTP登录账号 
	 * @param password FTP登录密码 
	 * @param basePath FTP服务器基础目录
	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/sku/。文件的路径为basePath+filePath
	 * @param filename 上传到FTP服务器上的文件名 
	 * @param input 输入流 
	 * @return 成功返回true,否则返回false 
	 */  
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,String filePath, String filename, InputStream input) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			int reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.out.println("FTP服务器连接失败");
				return result;
			}
			//切换到上传目录
			if (!ftp.changeWorkingDirectory(basePath+filePath)) {
				//如果目录不存在创建目录
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir)) continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			//设置上传文件的类型为二进制类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			//上传文件
			if (!ftp.storeFile(filename, input)) {
				return result;
			}
			input.close();
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}

删除:

public static boolean deleteFile(String host, int port, String username, String password, String filePath, String filename){
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			int reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				System.out.println("FTP服务器连接失败");
				return result;
			}
			if (ftp != null) {
				ftp.changeWorkingDirectory(filePath);
				ftp.dele(filename); 
				result = true; 
			}
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("---------删除FTP文件错误:"+e.getMessage());
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
					System.out.println("------关闭FTP连接错误:"+ioe.getMessage());
				}
			}
		}
		return result;
	}

上传图片和删除图片的时候,路径都是相对的哦,比如你要删除/home/images/sku/1.jpg;因为我们FTP配置的根目录就是/home/images/,所以,filePath参数就是/sku/,不要搞错了。

3.合成图片地址

就是你保存进数据库的图片地址,任何地方都可以打开的。

这个地址其实是一个合成地址,由图片服务器绑定域名地址(test.test.com/)加上nginx配置的访问地址(images/)再加上图片文件夹以及文件名称(sku/1.jpg),

合在一起就是:http://test.test.com/images/sku/1.jpg

大家有什么不明白的地方可以在评论区找我。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值