IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> fastdfs简介及在springboot中使用 -> 正文阅读

[Java知识库]fastdfs简介及在springboot中使用

作者:recommend-item-box type_blog clearfix

fastdfs简介

fastdfs是一个开源的轻量级分布式文件系统,
提供了文件上传、文件下载、文件同步、文件存储等功能,
解决了大容量存储和负载均衡的问题,适合以中小文件为载体的在线服务。

由跟踪服务器tracker server、存储服务器storage server组成,
客户端请求tracker server进行文件上传、下载,tracker server调度storage server完成文件存储。

storage server

简称storage,以卷volume为单位组织,
卷与卷之间的文件是不同的,实现了分布式存储,
一卷可以由一台或多台storage组成,每台storage的文件是相同的,起到了冗余和负载均衡的作用,
当存储空间不足时,可以动态添加卷,这样就扩大了系统的容量。

tracker server

简称tracker,tracker是fastdfs的协调者,负责调度所有的storage,storage启动会连接tracker,
告知自己所属的volume等信息,
并一直保持心跳。

tracker可以扩展为tracker cluster集群服务,
cluster中每个tracker都是完全对等的,
客户端在upload时可以在集群中任意选择一个tracker。
在这里插入图片描述

文件上传

文件上传流程:
在这里插入图片描述
当tracker收到客户端的upload请求时,会按照一定的策略分配一个卷volume,

选定volume后,tracker会在volume中选择一个storage返回给客户端,

客户端向storage发送upload请求,storage会为文件分配一个目录,即虚拟磁盘,
虚拟磁盘下有两级256*256的目录,
storage选择一个两级目录,
并为文件生成一个fileID作为文件名存储在该两级目录下。
在这里插入图片描述

在springboot使用fastdfs

fastdfs依赖

pom.xml中引入,

<!-- https://mvnrepository.com/artifact/com.github.tobato/fastdfs-client -->
<dependency>
	<groupId>com.github.tobato</groupId>
	<artifactId>fastdfs-client</artifactId>
	<version>1.27.2</version>
</dependency>

fastdfs配置

application.properties中添加,要换成自己的fastdfsIP,

fdfs.connect-timeout=60
fdfs.thumb-image.width=300
fdfs.thumb-image.height=300
fdfs.tracker-list=fastdfsIP:22122

controller

package com.example.duohoob.controller;

import java.net.URLEncoder;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;

/**
 * @author yangwei
 * @date 2022年10月13日
 */
@RestController
@RequestMapping("/fastDFS")
public class FastDFSController {

	@Autowired
	private FastFileStorageClient fastFileStorageClient;
	
	@RequestMapping("/upload")
	public String upload(MultipartFile file) throws Exception {
		String originalFilename = file.getOriginalFilename();
		String fileName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
		StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), fileName, null);
		String fullPath = storePath.getFullPath();
		return fullPath;
	}
	
	@RequestMapping("/download")
	public void download(String fullPath, HttpServletRequest request, HttpServletResponse response) throws Exception {
		int index = fullPath.indexOf("/");
		String groupName = fullPath.substring(0, index);
		String path = fullPath.substring(index + 1);
		byte[] bytes = fastFileStorageClient.downloadFile(groupName, path, new DownloadByteArray());
		response.setCharacterEncoding("UTF-8");
		response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("下载文件名.jpg", "UTF-8"));
		ServletOutputStream outputStream = response.getOutputStream();
		IOUtils.write(bytes, outputStream);
	}
	
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:18:51  更:2022-10-17 12:22:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 13:58:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码