热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分布式系统图片上传方案(一)

2019独角兽企业重金招聘Python工程师标准今天给大家分享的是分布式系统图片上传方案,如有不足,敬请指正。我们都知道在我们开发中,

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


  今天给大家分享的是分布式系统图片上传方案,如有不足,敬请指正。

  我们都知道在我们开发中,经常要用到图片上传功能。那么在传统的上传方式中,我们是在项目的根目录下创建upload目录,将图片上传到服务器中。那么在分布式环境下,是有多个Tomcat存在的,当把图片直接上传到Tomcat服务器时,容易出现图片丢失的问题。

传统方式

  那么怎么解决这个问题呢?我们会不会有这样的想法:直接将图片上传到一个指定的目录,访问、下载图片都访问这个目录就好了。如下图:

图示

  由于项目最终是要部署到Linux环境,所以直接将图片上传到Linux服务器

  这就需要使用vsftpd组件,实现文件传输


一、vsftpd简介
  1. ftp(File Transfer Protocol)文件传输协议。(实现不同操作系统之间文件的传输)

  2. vsftpd是一个基于ftp协议的文件传输服务器软件

  3. 使用方法

  • 在Linux上安装vsftpd服务。
  • 根据图片的地址访问图片。(最终保存到数据库的是图片的路径)
  • web工程中实现图片上传

二、实现步骤

2.1 在Linux上部署vsftpd服务

2.1.1 安装vsftpd软件

  • [root@node ~]# yum -y install vsftpd

2.1.2 关闭匿名访问

  • 修改vsftpd配置文件 vim /etc/vsftpd/vsftpd.conf
图示

2.1.3 添加一个FTP用户

  • [root@node ~]# useradd ftpuser
  • [root@node ~]# passwd ftpuser

2.1.4 设置防火墙

  • vsftpd服务默认端口号为21,修改防火墙,开放此端口,重启防火墙

2.1.5 修改selinux(Linux安全内核系统)

  • 查看selinux,默认是禁用了ftp访问的
  • 修改selinux,开放ftp访问权限
  1. [root@node ~]# setsebool -P allow_ftpd_full_access on
  2. [root@node ~]# setsebool -P ftp_home_dir on

2.1.6 启动vsftpd服务

  • [root@node vsftpd]# service vsftpd start

2.1.7 通过浏览器访问测试

  • 访问地址:ftp://192.168.23.12:21 ,发现无法访问,原因是:被动模式下,数据传输服务被防火墙拦截了。
被动模式
主动模式

2.1.8 配置被动模式

  1. 编辑/etc/vsftpd/vsftpd.conf文件
  • [root@node ~]# vim /etc/vsftpd/vsftpd.conf
  1. 添加防火墙范围设置(在文件尾部添加即可)
  • pasv_min_port=30000
  • pasv_max_port=30999
  1. 修改防火墙,开启30000:30999之间所有的端口。
  2. 重启防火墙。
  3. 重启vsftpd服务
图示

  再次访问浏览器,发现可以正常连接了

2.1.9 java代码测试上传功能

  前提:在maven中添加ftp服务的依赖

commons-netcommons-net

package com.xkt.base.test;import java.io.File;
import java.io.FileInputStream;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;/*** 测试文件上传* * @author lzx**/
public class TestFtp {public static void main(String[] args) {try {// 1.创建ftp客户端FTPClient client = new FTPClient();// 2.连接服务器client.connect("192.168.109.3", 21);// 3.登录,认证身份boolean flag = client.login("ftpuser", "ftpuser");if (flag) {/** 4.指定图片上传的目录,默认路径在ftpuser的家目录下* * 确保ftpuser用户有这个目录下的写权限* * 在Linux上用ftpuser这个用户,去创建这个目录* */client.changeWorkingDirectory("/home/ftpuser/ego/images");// 5.指定上传为被动上传,因为:很多的客户端禁止主动模式client.enterLocalPassiveMode();// 6.指定文件上传的方式为二进制,即使用字节流client.setFileType(FTP.BINARY_FILE_TYPE);// 7.上传File pic = new File("F:/图片/3.jpg");boolean result = client.storeFile(System.currentTimeMillis() + ".jpg", new FileInputStream(pic));if (result) {System.out.println("上传成功");} else {System.out.println("上传失败");}}client.disconnect();} catch (Exception e) {e.printStackTrace();}}}


  那么问题来了,在访问浏览器过程中大家是否发现图片加载时间稍微有点长呢?而且这还只是一张图片,那么在我们实际开发中遇到的类似某宝,某猫,某东这种大型网站每个页面需要加载的图片更多,而且对并发量的要求也很高又该怎么解决呢?这就需要用到Tengine了,关于它的介绍我们将在后面的文章中给出。

版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!


转:https://my.oschina.net/u/4118479/blog/3043247



推荐阅读
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • PHP程序员玩转Linux系列 搭建FTP代码开发环境
    PHP程序员玩转Linux系列搭建FTP代码开发环境-PHP程序员玩转Linux系列文章:有些同学可能觉得我写的都是啥yum安装的,随便配置一下而已,没啥技术含量,我的目的是让大家 ... [详细]
  • 使用SFTP密钥进行根目录不受限制的指定(第三部分)
    20190127之前限制ChrootDirectory之后,需要对原有环境改造较多1.之前配置的网站都是直接存在在了varwww2、还没有部署网站的新服务器&#x ... [详细]
  • linux ftp 线程数设置,Linux搭建ftp在windows下这么访问,需要怎么设置【设置vsftp最大连接数和每个ip的最大连接数】...
    文章来源:http:zhidao.baidu.comlink?urlLOfStD1kcxGhI_D5qC7oka3_4QZc1nn1SJwWaSd4onWoVl5Wt ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。将jenkins项目 ... [详细]
  • FTP服务ftp的报错及用户管理
    ftp服务常见报错530报错认证失败(密码错误或者服务端拒绝)550服务本身未开启553文件系统不可写(权限问题)500服 ... [详细]
  • 【教程】SecureCRT8.5安装和注册的详细步骤及操作指南
    00.目录文章目录00.目录01.SecureCRT8.5介绍02.SecureCRT8.5的特性03.SecureCRT8.5的特点04.SecureCRT8.5安装05.Sec ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
author-avatar
爱情丫丫2502895047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有