当前位置: 首页 > news >正文

React + SpringBoot + Minio实现文件的预览

思路:后端提供接口,从minio获取文件的预览链接,返回给前端,前端使用组件进行渲染展示

  1. 这里我从minio获取文件预览地址用到了一个最近刚开源的项目,挺好用的,大伙可以试试,用法也很简单
    官网:https://x-file-storage.xuyanwu.cn/#/
    Gitee:https://gitee.com/dromara/x-file-storage?_from=gitee_search
<dependency><groupId>org.dromara.x-file-storage</groupId><artifactId>x-file-storage-spring</artifactId><version>2.1.0</version>
</dependency>dromara:x-file-storage:default-platform: minio-1 # 默认存储平台minio:- platform: minio-1 # 存储平台标识enable-storage: true  # 启用存储access-key: vsrfrBr3maUFmserLMp9secret-key: i2ehAdnwos1eWu0ZNqkMgJdhsGZSF8PSp03mG86xend-point: http://XXX.XXX.XXX.XXX:9000bucket-name: filedomain: ?? # 访问域名,注意“/”结尾,例如:http://minio.abc.com/abc/base-path:  # 基础路径
  1. 以下是后端接口主要逻辑,把viewUrl给前端返回就行,格式类似于,文件名后面拼接着认证信息什么的,后端工作到这里就完成了
    “http://XXX.XXX.XXX.XXX:9000/file/65c416eecc50d2508a5fb86b.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=vsrfrBr3maUFmserLMp9%2F20240208%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240208T025942Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=b31d4ce4142bb0626f6e45a9448255124c125bf4f2e6e2be506e4f736909dadc”
@Autowired
private FileStorageService fileStorageService;// 上传到minio返回的文件名称
String minioName = sysFile.getMinioName();
FileInfo fileInfo = new FileInfo().
setPlatform("minio1").setFilename(minioName);
// 获取一周后的时间作为过期时间
DateTime dateTime = DateUtil.offsetWeek(DateUtil.date(), 1);
String viewUrl = fileStorageService.generatePresignedUrl(fileInfo, dateTime);
// 把文件名放进响应头,前端获取文件后缀需要用
response.setHeader("Content-Disposition", "attachment;filename=" +  URLEncoder.encode(minioName, "utf8"));
  1. 下面开始前端工作,找到一个渲染的组件,react-file-viewer
  2. yarn add react-file-viewer
  3. 核心代码,fileType(文件类型,比如:docx、pdf等等),filePath(文件的下载地址)这两个属性是必需的
<FileViewerfileType={fileViewType}filePath={fileViewUrl}errorComponent={CustomErrorComponent}onError={onError}style={{ width: "100%" }}
/>
  1. 文件类型可以从响应头中拿到
const content = response.headers["content-disposition"].split("=");
const fileName = decodeURI(content[1]); // 设置下载的文件名
const ext = getFileExtension(fileName);
setFileViewType(ext);// 获取文件名中的后缀
function getFileExtension(fileName: string): string {/*只获取后缀*/var suffix = fileName.substring(fileName.lastIndexOf(".") + 1); //txtreturn suffix;
}
  1. 看看效果,两个按钮是antdv 的 Modal组件带的
    在这里插入图片描述

  2. 恭喜你,至此已经完成

  3. 多提一嘴,x-file-storage用来上传下载也很方便

// 上传
FileInfo upload = fileStorageService.of(multipartFile).upload();
// 下载
FileInfo fileInfo = new FileInfo()
.setPlatform("minio-1").setFilename(sysFile.getMinioName());
Downloader download = fileStorageService.download(fileInfo);
http://www.lryc.cn/news/300113.html

相关文章:

  • 心法利器[107] onnx和tensorRT的bert加速方案记录
  • AcWing 122 糖果传递(贪心)
  • unity的重中之重:组件
  • Linux释放内存
  • Python算法题集_翻转二叉树
  • Git快速掌握,通俗易懂
  • PHP毕业设计图片分享网站76t17
  • 代码随想录 Leetcode45. 跳跃游戏 II
  • 【C语言】socketpair 的系统调用
  • 【论文精读】BERT
  • Codeforces Round 925 (Div. 3) - A、B、C、D、E
  • 快速部署MES源码/万界星空科技开源MES
  • 【Python网络编程之TCP三次握手】
  • 【leetcode】深搜、暴搜、回溯、剪枝(C++)2
  • 鸿蒙开发-UI-图形-图片
  • .NET Core WebAPI中使用Log4net记录日志
  • Nginx配置php留档
  • 英语题不会怎么搜答案?分享五个支持答案和解析的工具 #学习方法#媒体
  • Rust 数据结构与算法:4栈:用栈实现进制转换
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务
  • Django视图
  • python基本语法
  • app逆向-⽹络请求库rxjava2
  • Spring Boot 笔记 007 创建接口_登录
  • java数据结构与算法刷题-----LeetCode594. 最长和谐子序列
  • 数据分析基础之《pandas(6)—高级处理》
  • IOS破解软件安装教程
  • [缓存] - 1.缓存共性问题
  • Python爬虫——解析库安装(1)
  • 中科大计网学习记录笔记(十一):CDN