当前位置:   article > 正文

FastDFS文件管理知识点+案例分析_fastdfs和tomcat

fastdfs和tomcat

一 介绍FastDFS 原理

        FastDFS开源分布式文件系统由C语言编写实现, 可以通过专有API访问,目前提供了C、Java和PHP API。

        FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

二 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: 具有备份功能、不怕磁盘损坏。

三 集成spring

3.1 编写工具类FastDFS.java,代码如下:

  1. package com.utils;
  2. import org.apache.commons.io.FilenameUtils;
  3. import org.csource.common.NameValuePair;
  4. import org.csource.fastdfs.ClientGlobal;
  5. import org.csource.fastdfs.StorageClient1;
  6. import org.csource.fastdfs.TrackerClient;
  7. import org.csource.fastdfs.TrackerServer;
  8. import org.springframework.core.io.ClassPathResource;
  9. /**
  10. * fastDFS文件上传工具类
  11. *
  12. */
  13. public class FastDFSUtils {
  14. /**
  15. *
  16. * @param pic byte数组类型文件
  17. * @param fileName 文件名称
  18. * @param size 文件大小
  19. * @return
  20. * @throws Exception
  21. */
  22. public static String uploadFile(byte[] pic, String fileName, long size) throws Exception {
  23. //1. 设置管理节点ip和端口
  24. ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
  25. ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
  26. //2. 创建和管理节点的对象
  27. TrackerClient trackerClient = new TrackerClient();
  28. //3. 获取管理节点连接
  29. TrackerServer connection = trackerClient.getConnection();
  30. //4. 创建存储节点, 第一个参数, 传入管理节点连接, 第二个参数为null, 无用的
  31. StorageClient1 storageClient = new StorageClient1(connection, null);
  32. //5. 获取上传文件的扩展名称
  33. String ext = FilenameUtils.getExtension(fileName);
  34. //6. 创建文件的属性对象
  35. NameValuePair[] meta_list = new NameValuePair[3];
  36. meta_list[0] = new NameValuePair("fileName", fileName);
  37. meta_list[1] = new NameValuePair("fileExt", ext);
  38. meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));
  39. //7. 上传并返回图片地址
  40. String path = storageClient.upload_file1(pic, ext, meta_list);
  41. System.out.println("上传并返回图片地址为:"+path);
  42. return path;
  43. }
  44. /**
  45. * 删除文件
  46. * path: group1/M00/00/38/DEwSsFoSQfWAFuXeAAMfubPUZ-U666.jpg
  47. */
  48. public static void deleteFile(String path){
  49. try {
  50. //1. 设置管理节点ip和端口
  51. ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
  52. ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
  53. //2. 创建和管理节点的对象
  54. TrackerClient trackerClient = new TrackerClient();
  55. //3. 获取管理节点连接
  56. TrackerServer connection = trackerClient.getConnection();
  57. //4. 创建存储节点, 第一个参数, 传入管理节点连接, 第二个参数为null, 无用的
  58. StorageClient1 storageClient = new StorageClient1(connection, null);
  59. int i = storageClient.delete_file1(path);
  60. System.out.println("删除图片的结果为:"+i);
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }

3.2 修改配置文件fdfs_client.conf,修改url以及端口号,找运维要

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/170065
推荐阅读
相关标签
  

闽ICP备14008679号