Spring Boot简单集成fastDFS

news/2024/12/29 6:47:57/

FastDFS简介

FastDFS是一个开源的轻量级分布式文件系统,它解决了大容量存储和负载均衡的问题。FastDFS架构包括Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,Tracker server负责负载均衡和调度,最终由Storage server完成文件上传和下载。

Spring Boot项目集成FastDFS

添加Maven依赖

在你的Spring Boot项目的pom.xml文件中添加FastDFS Java客户端的依赖。例如:

<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client-spring-boot-starter</artifactId><version>最新版本号</version>
</dependency>

注意:这里的版本号应该替换为FastDFS Java客户端的最新稳定版本。

配置FastDFS连接

在Spring Boot的配置文件(如application.properties或application.yml)中添加FastDFS的连接配置。
例如,在application.yml中配置,

fdfs:so-timeout: 1500connect-timeout: 600thumb-image:height: 50width: 50tracker-list:- Tracker服务器地址:端口

创建一个Controller来处理文件上传和下载请求

java">import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;@RestController
@RequestMapping("/file")
public class FileController {@Autowiredprivate FastFileStorageClient storageClient;@PostMapping("/upload")public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件为空");}try {StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(),FileUtils.getExtension(file.getOriginalFilename()),null);return ResponseEntity.ok(storePath.getFullPath());} catch (IOException e) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");}}@GetMapping("/download")public ResponseEntity<byte[]> downloadFile(@RequestParam("group") String group, @RequestParam("path") String path) {if (StringUtils.isEmpty(group) || StringUtils.isEmpty(path)) {return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new byte[0]);}try {byte[] fileContent = storageClient.downloadFile(group, path, null);HttpHeaders headers = new HttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + path.substring(path.lastIndexOf("/") + 1) + "\"");headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);return new ResponseEntity<>(fileContent, headers, HttpStatus.OK);} catch (IOException e) {return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new byte[0]);}}
}

http://www.ppmy.cn/news/1559002.html

相关文章

BCD编码数据在网络传输中经文本转换的隐患

在计算机网络中&#xff0c;数据对象通常需要转换为适合传输的格式。BCD&#xff08;Binary-Coded Decimal&#xff09;编码的数据如果直接被转成字节数组并通过GBK等字符编码形成字符串进行传输&#xff0c;可能会引起一系列问题&#xff0c;如数据丢失、歪曲和安全性风险。 …

ElasticSearch 分布式部署

一、引言 在当今大数据时代&#xff0c;数据呈爆炸式增长&#xff0c;如何高效地存储、检索数据成为了众多企业面临的关键挑战。ElasticSearch 作为一款强大的分布式搜索引擎&#xff0c;凭借其卓越的性能、灵活的扩展性以及强大的全文检索能力&#xff0c;在日志分析、数据分…

LeetCode 59. 螺旋矩阵 II (C++实现)

1. 题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a; 输入&#xf…

torch.tensor

torch.tensor 通过复制数据构造一个张量 &#xff08;构造出的张量是一个没有自动微分&#xff08;autograd &#xff09;历史的张量&#xff0c;也称为叶张量&#xff0c;参考Autograd mechanics&#xff09;。 torch.tensor(data, *, dtypeNone, deviceNone, requires_gra…

微软远程桌面APP怎么用

微软远程桌面&#xff08;Remote Desktop&#xff09;客户端&#xff08;RD Client&#xff09;是一款由微软开发的应用程序&#xff0c;允许用户通过网络连接远程访问和控制另一台计算机。同时&#xff0c;微软远程桌面RD Client支持多种设备和操作系统&#xff0c;包括Window…

使用 Three.js 创建动态卡片动画

介绍 我们将学习如何使用 Three.js 创建一个具有动态卡片动画和粒子效果的 3D 场景。项目包括&#xff1a; 卡片的动态进入与点击旋转动画背景粒子效果通过鼠标交互实现卡片旋转 HTML 和 CSS HTML 文件是项目的基础结构&#xff0c;用于引入相关的依赖和定义渲染 3D 场景的容…

Go主协程如何等其余协程完再操作

在Go语言中&#xff0c;主协程&#xff08;main goroutine&#xff09;可以使用多种方式来等待其他协程完成其操作。常见的方法是使用通道&#xff08;channels&#xff09;和 sync 包中的工具&#xff0c;比如 sync.WaitGroup。以下是这两种方法的示例&#xff1a; 使用 sync…

Dockerfile运行指令

1.RUN 在build构建时执行命令。 举例&#xff1a;安装vim Shell命令格式 RUN yum install -y vim Exec命令格式 RUN ["yum","install","-y","vim"] 2.CMD 用于设置容器启动时默认执行的命令或参数。 如果Dockerfile中有多个CMD&a…