分布式文件系统nginx
实现图片上传功能,须要图片服务器json
若是要实现图片上传功能,须要一台图片服务器(能够不要,可是由于图片上传只能到指定的服务器上,若是不搭建另一台服务器用于接收图片,则只能上传到正在运行的应用服务器,这样的话,应用服务器的压力将会无限加大)数组
一、存储空间可扩展服务器
二、提供统一的访问方式架构
三、访问效率高负载均衡
一、使用fastDFS分布式文件系统分布式
二、使用nginx反向代理服务器性能
FastDFS(Fast Distributed file system),使用了C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、横向扩展等机制,并注重高可用、高性能等指标,使用FastDFS能够很容易搭建一套高性能的文件服务器集群,提供文件上传、下载等服务this
FastDFS架构包括Tracker server和Storage server。由客户端请求Tracker server文件的上传或下载,Tracker server调度Storage server完成文件上传下载。spa
负载均衡和调度,经过Tracker server调度,经过Tracker server在文件上传时能够根据一些策略找到storage server提供文件上传服务,能够将tracker称为追踪服务器或调度服务器。
文件存储,客户端上传的文件最终存储在storage server,storage server没有实现本身的文件系统而是利用操做系统的文件系统来管理文件,能够将storage称为存储服务器
Tracker server管理集群,收集信息,处理信息,为了保证高可用,能够搭建集群
Storage server保存文件,分为多组,组合组之间的数据不同,组内成员数据一致,保证数据高可用,能够增长组,达到扩容效果
其中,file_id指文件索引信息,内包含:组名、虚拟磁盘路径、数据两级目录、文件名,以下图:
引入依赖
<!--fastdfs-client--> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client</artifactId> <version>1.25-RELEASE</version> </dependency>
配置fafstdfc_client.conf
tracker_server=192.168.96.253:22122
Java步骤
//加载配置文件 Stringconf_filename=this.class().getResource("/fastdfs_client.conf").getPath(); //初始化客户端全局对象 ClientGlobal.init(conf_filename); //建立存储客户端对象 StorageClientstorageClient=newStorageClient(); //上传文件 String[]arr=storageClient.upload_file("即将上传的文件路径",null); /** *访问路径:http://192.168.12.131/group1/M00/00/00/wKgMg1o53fOAL1CRAABonuLw4M4127.jpg *[group1,M00/00/00/wKgMgFlIkk2AHfnLAABonuLw4M4075.jpg] *数组中的第一个元素:组的名称 *数组中的第二个元素:远程文件名称 */
返回的数组中
第一个元素:组名
第二个名字:远程名
下载
//加载配置文件 Stringconf_filename=this.getClass().getResource("/fastdfs_clien.conf").getPath(); //初始化客户端全局的对象 ClientGlobal.init(conf_filename); //建立存储客户端对象 StorageClientstorageClient=newStorageClient(); //下载文件 byte[]data=storageClient.download_file("组名","远程文件名"); FileOutputStreamfos=newFileOutputStream(newFile("文件下载存储路径")); fos.write(data); fos.flush(); fos.close();
删除服务器上图片
//加载配置文件 Stringconf_filename=this.getClass().getResource("/fastdfs_client.conf").getPath(); //初始化客户端全局对象 ClientGlobal.init(conf_filename); //建立存储客户端对象 storageClientstorageClient=newStorageClient(); //删除文件 intres=storageClient.delete_file("组名","远程文件名"); /* *若是返回0,则表明成功删除 */