SpringBoot 开发案例之整合FastDFS分布式文件系统
1、pom依赖
<!--fastdfs-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.6</version>
</dependency>
2、application.properties
server.port=8082
#超时时长
fdfs.so-timeout=1500
#连接tracker服务器超时时长
fdfs.connect-timeout=600
#缩略图
fdfs.thumb-image.height=150
fdfs.thumb-image.width=150
#tracker服务配置地址列表,替换成自己服务的IP地址,支持多个
fdfs.tracker-list=192.168.206.173:22122
#文件上传配置
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
3、工具类
@Component
public class FastdfsUtils
{
public static final String DEFAULT_CHARSET = "UTF-8"; @Autowired
private FastFileStorageClient fastFileStorageClient; /**
* 上传
*
* @param file
* @return
* @throws IOException
*/
public StorePath upload(MultipartFile file)
throws IOException
{
// 设置文件信息
Set<MetaData> mataData = new HashSet<>();
mataData.add(new MetaData("author", "fastdfs"));
mataData.add(new MetaData("description", file.getOriginalFilename()));
// 上传
StorePath storePath = fastFileStorageClient.uploadFile(
file.getInputStream(), file.getSize(),
FilenameUtils.getExtension(file.getOriginalFilename()),
null);
return storePath;
} /**
* 删除
*
* @param path 例如: group1/M00/00/00/wKjOrWD45PKAY4xmAFLQaGXPnu0735.jpg
*/
public void delete(String path)
{
fastFileStorageClient.deleteFile(path);
} /**
* 删除
*
* @param group 例如: group1
* @param path 例如: M00/00/00/wKjOrWD45PKAY4xmAFLQaGXPnu0735.jpg
*/
public void delete(String group, String path)
{
fastFileStorageClient.deleteFile(group, path);
} /**
* 文件下载
*
* @param path 文件路径,例如:group1/M00/00/00/wKjOrWD40JiAQNKLABO5RCqSdcQ975.jpg
* @param filename 下载的文件命名
* @return
*/
public void download(String path, String filename, HttpServletResponse response)
throws IOException
{
// 获取文件
StorePath storePath = StorePath.parseFromUrl(path);
//如果名字是空的 下载文件名以存储的为准
if (StringUtils.isBlank(filename))
{
filename = FilenameUtils.getName(storePath.getPath());
}
else
{
filename = filename + storePath.getPath().substring(storePath.getPath().lastIndexOf("."));
}
byte[] bytes =
fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());
response.reset();
response.setContentType("applicatoin/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
ServletOutputStream out = response.getOutputStream();
out.write(bytes);
out.close();
}
}
4、controller层代码
@RestController
public class FileController
{
private static final Logger LOGGER = LoggerFactory.getLogger(FileController.class); @Resource
private FastdfsUtils fastdfsUtils; @PostMapping("uploadFile")
private StorePath uploadFile(MultipartFile file)
{
StorePath storePath = null;
try
{
storePath = fastdfsUtils.upload(file);
}
catch (Exception e)
{
e.printStackTrace();
LOGGER.info("服务异常");
}
return storePath;
} @PostMapping("deleteByPath")
private String deleteByPath(String path)
{
try
{
fastdfsUtils.delete(path);
}
catch (Exception e)
{
e.printStackTrace();
LOGGER.info("删除异常");
}
return "success";
} @GetMapping("downloadFile")
private void downloadFile(String path, String name, HttpServletResponse response)
{
try
{
fastdfsUtils.download(path, name, response);
}
catch (Exception e)
{
e.printStackTrace();
LOGGER.info("下载异常");
}
}
}
SpringBoot 开发案例之整合FastDFS分布式文件系统的更多相关文章
- SpringBoot开发案例之整合Dubbo分布式服务
前言 在 SpringBoot 很火热的时候,阿里巴巴的分布式框架 Dubbo 不知是处于什么考虑,在停更N年之后终于进行维护了.在之前的微服务中,使用的是当当维护的版本 Dubbox,整合方式也是使 ...
- SpringBoot开发案例之整合Kafka实现消息队列
前言 最近在做一款秒杀的案例,涉及到了同步锁.数据库锁.分布式锁.进程内队列以及分布式消息队列,这里对SpringBoot集成Kafka实现消息队列做一个简单的记录. Kafka简介 Kafka是由A ...
- SpringBoot开发案例之整合Activiti工作流引擎
前言 JBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baeyens离开JBoss后,JBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过,目前官 ...
- 转载-SpringBoot开发案例之整合日志管理
转载:https://cloud.tencent.com/developer/article/1097579 有一种力量无人能抵挡,它永不言败生来倔强.有一种理想照亮了迷茫,在那写满荣耀的地方. 00 ...
- 服务器后端开发系列——《实战FastDFS分布式文件系统》[转]
1.FastDFS的配置.部署与API使用解读(1)Get Started with FastDFS 内容:讲解FastDFS的背景.基本原理,并讲述基本的配置.部署和测试的内容. 2.FastDFS ...
- SpringBoot开发案例从0到1构建分布式秒杀系统
前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场 ...
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- FastDFS 分布式文件系统部署实战及基本使用
FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...
- CentOS7 安装FastDFS分布式文件系统
CentOS7 安装FastDFS分布式文件系统 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家 ...
随机推荐
- java第十二周作业
1.定义一个点类Point, 包含2个成员变量x.y分别表示x和y坐标,2个构造器Point()和Point( intx0,y0),以及一个movePoint (int dx,intdy)方法实现点的 ...
- Day 004:PAT练习--1033 旧键盘打字 (20 分)
题目要求如下: 我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的: 1."对应英文字母的坏键以大写给出",若有字母,则与其相关的字母全部不能输出,不论是大 ...
- ValidForm5.3.2 忽略表单项校验详解
ValidForm 官方文档 项目的需求是这样的:一个checkbox,一个input,选中checkbox的时候,需要校验input,取消选中的时候,不要校验input. <input typ ...
- linux在图形界面一登录就自动闪退
今天一登录linux图形界面就自动退出了,又退到了登录界面了,密码是正确的. 解决方法如下: 1. 先按 Ctrl + Alt + F1,进入 命令行模式. 2. 在命令行里,输入用户名密码正常登录. ...
- C#关于在返回值为Task方法中使用Thread.Sleep引发的思考
起因 最近有个小伙伴提出了一个问题,就是在使用.net core的BackgroundService的时候,对应的ExecuteAsync方法里面写如下代码,会使程序一直卡在当前方法,不会继续执行,代 ...
- 【ACM程序设计】并查集
并查集 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题.一些常见的用途有:求连通子图.求最小生成树的Kruskal算法和求最近公共祖先( ...
- 小干货:Linux 系统的备份恢复
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! tar 命令 副本(本机备份整个系统,以后还原还是还原到 ...
- Git 使用心得 & 常见问题整理
开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...
- ES6片段
那些可能会忘记或不知所以然的点: 1. 2. 3. 4. 5. 6. /* 函数调用会在内存形成一个"调用记录",又称调用帧,保存调用位置和内存变量等信息. 如果在函数 A 的内部 ...
- 一次 HTTP 请求就需要一次 TCP 连接吗?
一次 HTTP 请求就需要一次 TCP 连接吗? 本文写于 2021 年 2 月 9 日 太长不看版本:短连接需要,长连接不需要. 一次 HTTP 请求就需要一次 TCP 连接吗? TCP 的连接与断 ...