一,关于FastDFS
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
如上图,其中tracker并不保存实际的图片,而是起到一个协调的作用,具体的图片存储在storage里面。但我们页面上通过url读取图片的时候,我们读取的还是storager的地址,但是storager本身是不带http服务器功能的,所以,我们还需要使用nginx来作为我们的http服务器,我们再client才能通过url读到图片。
上传下载的流程:
上传:
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
- 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
- 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
- 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
下载:
二,FastDFS+Nginx搭建
为了完成正常的上传下载文件的功能,我们需要搭建tracker,storage,nginx。其中nginx跟FastDFS的交互通过nginx的插件fastdfs-nginx-module_v1.16.tar.gz 来完成。
所需压缩包如下:
此处省略一万个字。。。
三,代码测试
@Test
public void testUpLoad() throws FileNotFoundException, IOException, MyException{
//1,把FastDFS提供的jar添加到工程中
//2,初始化全局配置,加载一个配置文件
ClientGlobal.init("G:\\taotaoShop\\taotao-manager\\taotao-manager-web\\src\\main\\resources\\properties\\client.conf");
//3,创建一个TrackerClient对象
TrackerClient trackerClient=new TrackerClient();
//4,创建一个TrackerServer对象
TrackerServer trackerServer=trackerClient.getConnection();
//5,声明一个StorageServer对象,null
StorageServer storageServer=null;
//6,获得StorageClient对象
StorageClient storageClient=new StorageClient(trackerServer,storageServer);
//7,直接调用StorageClient对象方法上传文件即可
String[] strings=storageClient.upload_file("H:\\Sherl.jpg", "jpg", null);
for(String s : strings){
System.out.println(s);
}
}