赞
踩
FastDFS开源分布式文件系统由C语言编写实现, 可以通过专有API访问,目前提供了C、Java和PHP API。
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
通过原理图,我们可知道有以下组件构成:
1、 tracker server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和storage server的枢纽。
2、 storage server:存储服务器(存储节点或数据服务器),文件和meta data都保存到该存储服务器上。
3、 group(volume):组,也可以称为卷,group是相对storage server而言的,即资源存放地,一个组可以有多个storage server,且数据相互备份。同组内服务器上的文件是完全相同的。
4、 meta data:文件相关属性,以键值对方式存储。
5、 client:客户端,作为业务请求的发起方,通过专有接口(API),使用TCP/IP协议与跟踪服务器或存储服务器进行数据交互。
和tomcat相比,有哪些优点?
FastDFS相比于Tomcat :不存在单点故障问题、支持容灾。
FastDFS相比于Tomcat:集群 (安全) 保存图片过多时 扩容 分配合理 。
FastDFS相比于Tomcat: 具有备份功能、不怕磁盘损坏。
3.1 编写工具类FastDFS.java,代码如下:
- package com.utils;
-
-
- import org.apache.commons.io.FilenameUtils;
- import org.csource.common.NameValuePair;
- import org.csource.fastdfs.ClientGlobal;
- import org.csource.fastdfs.StorageClient1;
- import org.csource.fastdfs.TrackerClient;
- import org.csource.fastdfs.TrackerServer;
- import org.springframework.core.io.ClassPathResource;
-
- /**
- * fastDFS文件上传工具类
- *
- */
- public class FastDFSUtils {
-
-
-
- /**
- *
- * @param pic byte数组类型文件
- * @param fileName 文件名称
- * @param size 文件大小
- * @return
- * @throws Exception
- */
- public static String uploadFile(byte[] pic, String fileName, long size) throws Exception {
- //1. 设置管理节点ip和端口
- ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
- ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
- //2. 创建和管理节点的对象
- TrackerClient trackerClient = new TrackerClient();
- //3. 获取管理节点连接
- TrackerServer connection = trackerClient.getConnection();
- //4. 创建存储节点, 第一个参数, 传入管理节点连接, 第二个参数为null, 无用的
- StorageClient1 storageClient = new StorageClient1(connection, null);
- //5. 获取上传文件的扩展名称
- String ext = FilenameUtils.getExtension(fileName);
-
- //6. 创建文件的属性对象
- NameValuePair[] meta_list = new NameValuePair[3];
- meta_list[0] = new NameValuePair("fileName", fileName);
- meta_list[1] = new NameValuePair("fileExt", ext);
- meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));
-
- //7. 上传并返回图片地址
- String path = storageClient.upload_file1(pic, ext, meta_list);
- System.out.println("上传并返回图片地址为:"+path);
- return path;
- }
- /**
- * 删除文件
- * path: group1/M00/00/38/DEwSsFoSQfWAFuXeAAMfubPUZ-U666.jpg
- */
- public static void deleteFile(String path){
- try {
- //1. 设置管理节点ip和端口
- ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
- ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
- //2. 创建和管理节点的对象
- TrackerClient trackerClient = new TrackerClient();
- //3. 获取管理节点连接
- TrackerServer connection = trackerClient.getConnection();
- //4. 创建存储节点, 第一个参数, 传入管理节点连接, 第二个参数为null, 无用的
- StorageClient1 storageClient = new StorageClient1(connection, null);
- int i = storageClient.delete_file1(path);
- System.out.println("删除图片的结果为:"+i);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
3.2 修改配置文件fdfs_client.conf,修改url以及端口号,找运维要
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。