小伙伴们在逛淘宝或者是京东的时候,都能看见一张张的图片,比如现在正值冬季,我们需要买一件羽绒服,打开淘宝,在搜索框中输入羽绒服,商家通过各种帅哥美女从不同的角度来展现羽绒服,通过一张张的图片从不同的侧面烘托各种羽绒服的细节,但是小伙伴们有没有思考过,在编程实现的过程中,我们是如何处理图片的呢?图片保存到哪儿?用户如何访问图片?需要什么样的服务器?需要什么样的协议?那时年少,逛淘宝的时候,哪想到这么多,只是一心想着赶紧买到美美的衣服,美美的穿上,时光变迁,造化弄人,阴差阳错,鬼使神差,不知道前世怎么样的回眸与擦肩,让小编走上了coding这条路`(*∩_∩*)′。今天这篇博文,小编就来简单分析一下图片的保存位置,希望可以帮助到有需要的小伙伴们,不足之处,还请小伙伴们多多指教`(*∩_∩*)′。
上传图片,我们主要考虑一个问题,图片上传到哪儿了?图片保存的位置,没错,图片可以保存到数据库,但是存在数据库太慢了,用户体验不好,so,我们需要保存一个图片路径就ok了,我们首先来看一下传统的项目图片存储的位置,传统项目只有一个web工程,我们上传图片保存到哪儿呢?如下图所示:
这样存储的好处是,我们可以在jsp页面直接访问图片,工程名加上image图片文件名就可以直接访问图片了,直接放在WebRoot下面,我们可以在网页上直接访问。客户端做请求,用户上传图片,把图片保存到image文件夹,如果用户需要访问图片,直接访问/image/xxx.jpg,这样就可以直接访问到图片了,这就是我们的传统项目,如果图片太多,我们可以在linux系统中映射盘符,那么这个存储空间是可以进行扩展的,把上面的话转成图片的形式,如下所示:
用户越来越多,并发量越来越大,一个tomcat支撑不住了,最简单的方法就是做tomcat集群,并发增加后,添加服务器,做tomcat集群,这个时候就不是一个tomcat了,我们来看一下现在的结构,如下图所示:
如上图所示,现在有两个tomcat,这个时候,我们前端需要一个负载均衡的服务器,由她来决定哪个tomcat为用户提供服务,现在用户做请求,有可能是tomcat1为用户提供服务,也有可能是tomcat1为用户提供服务,这时候,用户上传了一个图片,此时恰巧是tomcat1为用户提供服务,如上图所示,然后这个时候呢?用户又访问了一下图片,看看自己有没有把图片上传上去,第二次请求让tomcat2为用户提供服务,然后就去tomcat2找图片,找不到是不是,报了一个咱们再熟悉不过的错误404,用户不知道咋回事,我明明把图片上传上去了,为什么没有图片呢?真是见鬼!!!我们当然知道啦`(*∩_∩*)′,因为图片是上传到tomcat1上面了,当然找不着喽,那么我们该如何解决这个问题呢?总不能在出现这个问题的时候我们再思考如何解决,在设计阶段的时候,我们就需要考虑到这个问题,所以,在我们的集群环境中,存在这样的问题:有时候可以访问到图片,有时候访问不到,如何解决呢?我们肯定是有多台服务器的,那么我们把图片服务器弄成一台不就ok了吗?不管哪个tomcat需要上传图片,把这个图片都上传到图片服务器,增加一个图片服务器,如下图所示:
如上图所示,我们弄了一个图片服务器,是一个专门放置图片的服务器,我们访问图片通过http形式直接访问,so需要一个http服务,有了这个http服务器,我们就可以访问一个域名加上图片的路径,直接访问到图片了,那么这个服务我们如何实现呢?我们可以用tomcat,但是性能不是很高,我们可以使用apache,apache是一个组织,同时人家也是一个服务器哦`(*∩_∩*)′,当然现在比较流行的是nginx,现在nginx的名声已经远远大过apache,nginx可以实现反向代理,可是实现负载均衡,速度也是杠杠的`(*∩_∩*)′,我们可以选择nginx来实现我们的http服务,ok,我们的http服务用nginx,http可以让用户访问到,接下来面临的问题就是,我们如何把图片放上去呢?我们把图片上传到tomcat上,怎么样才能把图片弄到图片服务器上呢?我们可以采用ftp服务上传图片,ftp是一个协议我们使用linux自带的ftp服务器vsftpd。ok,博文介绍到这里,图片保存的位置分析就接近尾声了,在这里小编补充几点知识,http、ftp,详细讲解见下面:
http协议
http,英文名称HyperText Transfer protocol,是互联网上应用最为广泛的一种协议,所有的WWW文件都必须遵守这个标准,设计http最初的目的是为了提供一种发布和接收html页面的方法。http协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。她不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。下图表明了这种请求/响应模型:
ftp协议
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。简单来说,支持FTP协议的服务器就是FTP服务器,
与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
小编寄语:该博文小编主要分析了图片的存储位置,简单来说需要两个步骤,第一步,上传图片;第二步,把图片上传到ftp服务器,对于tomcat2也是同样的操作,这个时候,图片就在服务器上,这个时候,我们就可以通过http服务访问图片了,直接访问ftp就ok了,这个时候tomcat1和tomcat2上面就没有图片了,so我们需要一个图片服务器上,另外小编还简单介绍了http协议和ftp协议,更多知识,还请小伙伴们自己百度谷歌哦`(*∩_∩*)′,在接下来的博文小编将介绍图片服务器的搭建,敬请期待`(*∩_∩*)′!