FastDFS理论与Java程序的对接(图片,文件上传)

news2024/12/25 22:29:11

目录

  • fastdfs概述
  • Java程序对接fastDFS
    • pom
    • 配置java启动类注解
    • yaml文件配置
    • controller类
    • service类

fastdfs概述

什么是分布式文件系统?
是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机与节点相连。
通俗来讲:

  • 传统文件系统管理的文件就存储在本机
  • 分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问。

FastDFs是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:

  • 文件存储·
  • 文件同步
  • 文件访问(上传、下载)。
  • 存取负载均衡。
  • 在线扩容

适合有大容量存储需求的应用或系统。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。

FastDFS两个主要的角色:TrackerServer和storage Server

  • Tracker Server:跟踪服务器,主要负责调度storage节点与cint通信,在访问上起负载均衡的作用,和记录storage节点的运行状态(监控),是连接client和storage节点的枢纽
  • Storage Server:存储服务器,保存文件和文件的metadata(元数据),每个storageserver会启动一个单独的线程主动向Tracker cluster中每个trackersever报告状态信息(心跳),包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
  • Group:文件组,多台storageServer的售群。上传一个文件到同组内的一台机器上后,FastDFs会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务器,保存的数据不同,而且相互独立,不进行通信。
  • Tracker cluster:跟踪服务器的集群,有一组Tracker Server(跟踪服务器)组成
  • storage Cluster:存储集群,有多个Group组成

在这里插入图片描述

Java程序对接fastDFS

pom

 <!-- fastDFS分布式文件存储 -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.27.2</version>
        </dependency>

配置java启动类注解

@Import(FdfsClientConfig.class)---->加此注解就可以拥有带有连接池的Fastdfs java客户端了
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)------->为了解决JMX重复注册bean的问题

@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)

yaml文件配置

fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image: # 缩略图
    width: 60
    height: 60
  tracker-list: # tracker地址
    - 192.168.103.100:22122
  view-base-url: http://192.168.103.100:8888 #网页应用配置服务器地址

controller类

@RestController
public class UploadController {

    @Autowired
    private UploadService uploadService;
    @PostMapping("/upload")
    public ImageResult create(@RequestBody MultipartFile file){
        return uploadService.create(file);
    }
    @DeleteMapping("/delete")
    public boolean delete(@RequestParam("url")String url){
        return uploadService.delete(url);
    }
}

service类

@Service
@Log4j2
public class UploadServiceImpl implements UploadService {
    //fastDFS客户端
    @Autowired
    FastFileStorageClient fastFileStorageClient;
    //读取缩略图
    @Autowired
    private ThumbImageConfig thumbImageConfig;
    @Value("${fdfs.view-base-url}")
    private String basePath;

    /**
     * 图片上传至fastfds上
     * @param file
     * @return
     */
    @Override
    public ImageResult create(MultipartFile file) {
        // 获取文件后缀名
        String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");

        //上传
        StorePath storePath = null;
        InputStream is =null;
        try {
//            upload上传(任意类型文件都可以)
            is=file.getInputStream();
            storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(is, file.getSize(), extension,null);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
//                 输入流必须关闭,否则无法删除tomcat下的临时文件
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        log.info("正常图片的路径:{}",storePath.getFullPath());
        log.info("缩略图片的路径:{}",thumbImageConfig.getThumbImagePath(storePath.getFullPath()));
        return new ImageResult()
                .setErrno(0)
                .setData(new Image()
                        .setUrl(basePath+"/"+storePath.getFullPath()));
    }
//图片删除
    @Override
    public boolean delete(String url) {
        try {
            fastFileStorageClient.deleteFile(url);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【medini analyze 软件介绍】

medini analyze 软件介绍 简介主要功能&#xff08;功能安全范畴&#xff09;1、HARA2、建模3、FMEA & FMEDA4、FTA*这里只是笔者根据汽车功能安全分析经验简单列举了medini analyze的部分功能&#xff0c;完整的功能介绍请参考ANSYS官网* 简介 medini analyze是一款专业的…

怎么把pdf文件压缩到最小?四招快速压缩!

怎么把pdf文件压缩到最小&#xff1f;平常我们要压缩一个文件&#xff0c;一般都知道该如何操作。系统中自带了压缩工具&#xff0c;只需右键点击需要压缩的对象并选择"压缩"选项即可完成操作。然而&#xff0c;很多人也会发现&#xff0c;尽管大部分的文件都可以通过…

网络安全公司Dragos披露网络安全事件

工业网络安全公司 Dragos 披露了它所称的“网络安全事件”&#xff0c;此前一个已知的网络犯罪团伙试图突破其防御并渗透到内部网络以加密设备。 虽然 Dragos 表示威胁行为者没有破坏其网络或网络安全平台&#xff0c;但他们可以访问公司的 SharePoint 云服务和合同管理系统。…

05-HTML-图片标签

<img> 标签&#xff1a;src 属性是必需的。它规定图像的 URL。 绝对 URL - 指向另一个网站&#xff08;比如 src"http://www.example.com/image.gif"&#xff09;相对 URL - 指向网站内的一个文件&#xff08;比如 src"image.gif"&#xff09; <…

网络层最重要的协议—IP协议

网络层最重要的协议—IP协议 IP协议格式解决IP地址不够用问题的三种方法方法一: 动态分配IP地址方法二: NAT网络地址转换方法三: IPv6(根本上解决IP不够用的问题)小结&#xff1a; IP协议之地址管理主机号/网络号子网掩码特殊IP IP协议格式 4位版本&#xff1a;此处取4或64位首…

sort ,uniq ,tr ,cut命令

目录 一、sort命令 1.格式 2.命令演示 2.1 选项 -n :按照数字大小排序 2.2选项 -r &#xff1a;反向排序 2.3选项 -u&#xff1a;隐藏多余行 2.4选项 -t &#xff1a;指定分隔符&#xff1b;-k &#xff1a;指定字符&#xff1b;-o &#xff1a;指定保存文件 二、uniq命令…

Git的安装与版本控制

这里写目录标题 原理安装基本使用gitee-IDEA协同开发成员邀请开发组成员指定仓库权限给当前仓库设定分支提交代码时必须向自己的分支提交合并分支 - 无冲突 原理 Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09;、暂存区(Stage/Index)、…

【Linux】笔记分享

目录 - 前言- 目录结构- 磁盘文件系统- 文件权限 ls -l 的内容文件及目录权限实际案例 修改权限 -chmod[change ...]第一种方式&#xff1a; 、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文件所有者 -chown 修改文件所在组 -chgrp - 命令类型基础命令网络性能…

【数据类型-列表】------- PYTHON基础9

内容目录 一、数据类型-列表1. 列表1.1. 列表的截取 result List[start:end:step]1.2. 列表元素的修改 List[index] element1.3. 列表元素的删除 del List[index] 或 del List[start:end:step]1.4. 列表元素的拼接 “” 或者增量赋值运算符 “” 2. 列表常用内置函数 对象.内…

jdbc工具包

JDBC工具类 介绍 JDBC全称是Java数据库连接&#xff08;Java Database connect&#xff09;&#xff0c;它是一套用于执行SQL语句的JavaAPI。应用程序可通过这台API连接到关系数据库&#xff0c;并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。 JDBC实现细节 从…

深入浅出C语言——排序

文章目录 排序的概念常见的排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归形式 归并排序递归版本非递归版本 计数排序排序算法复杂度及稳定性分析 排序的概念 排序就是使用使一串记录&#xff0c;按照其中的某个或某些关…

vue3 nextTick()应用

在Vue3中&#xff0c;可以使用nextTick函数来延迟执行某些操作&#xff0c;这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后&#xff0c;等待DOM更新之后执行一些操作&#xff0c;比如获取DOM元素的尺寸、位置等。 nextTick() 例如&#xff0c;以下一个…

C语言—与坤(机)对弈

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分的设计心得 1.打印菜单 2.初始化棋盘 3.打印棋盘 棋盘最终效果 1.打印数据 2.打印分割线 如何扩展为10 x 10 棋盘&#xff1f; 4.玩家下棋、电脑下…

mkv文件怎么转换成mp4?来看看这四种转换方式吧!

mkv文件怎么转换成mp4&#xff1f;在很多小伙伴看到&#xff0c;图片就是图片&#xff0c;音频就是音频&#xff0c;视频就是视频&#xff0c;它们展现给人们的效果都差不多。但实际上&#xff0c;不管是图片、视频还是音频文件&#xff0c;其中一个重要的区别在于它们的文件格…

照片尺寸怎么调整大小?三个方法,高效、快捷、安全!

照片尺寸怎么调整大小&#xff1f;照片是我们在日常生活和办公中经常会使用的文件类型之一。在制作各种文件、讲义、PPT、视频等内容时&#xff0c;图片都会成为重要的一部分。不同的图片格式和大小各有特点&#xff0c;有些图片虽然比较大但画质清晰&#xff0c;有些则方便传输…

选择排序,直接插入排序

目录 一、选择排序 1.基本思想 2.直接选择排序的流程 3.实验 二、直接插入排序法 1.基本思想 2.直接插入排序法的流程 3.实验 三、反向排序 1.实验 一、选择排序 与冒泡排序相比&#xff0c;直接选择排序的交换次数更少&#xff0c;所以速度会更快。 1.基本思想…

centos linux 配置私有网段并联网

文章目录 1. 创建虚拟机2. 虚拟机 A 配置网络3. 虚拟机 B 分配静态地址4. 测试 1. 创建虚拟机 vcenter 创建两台虚拟机A 、B&#xff0c;如何创建虚拟机请参考这里 虚拟机 A 具备两个网络接口&#xff0c;外网接口为 ens192 ip&#xff1a;192.168.22.6/20&#xff0c;网关为…

Golang tracing:与 OpenTelemetry、jaeger实现 跨服务 全链路追踪

使用 OpenTelemetry 链路追踪说明 工作中常常会遇到需要查看服务调用关系,比如用户请求了一个接口接口会调用其他grpc,http接口,或者内部的方法这样的调用链路,如果出现了问题,我们需要快速的定位问题,这时候就需要一个工具来帮助我们查看调用链路OpenTelemetry就是这样一个工…

Sui改进提案(SIPs)及其审核流程

SIPs提供了一个清晰透明的流程&#xff0c;使社区可以对Sui网络提出改进建议。 Sui基金会致力于打造一个开放协作的生态&#xff0c;因此推出了Sui改进提案&#xff08;SIPs&#xff0c;Sui Improvement Proposals&#xff09;&#xff0c;这是一个记录社区为去中心化未来的发…

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展&#xff0c;电子商务成为了众多企业的首选模式&#xff0c;而开放API则成为了电商业务中不可或缺的部分。API&#xff08;Application Programming Interface&#xff09;&#xff0c;即应用程序接口&#xff0c;是软件系统不同组件之间交互的约定。电…