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

SeaweedFS S3 Spring Boot Starter

SeaweedFS S3 Spring Boot Starter

    • 源码
    • 特性
    • 环境要求
    • 快速开始
      • 1. 添加依赖
      • 2. 配置文件
      • 3. 使用方式
        • 方式一:注入服务类
        • 方式二:使用工具类
    • API 文档
      • SeaweedFsS3Service 主要方法
      • SeaweedFsS3Util 工具类方法
    • 配置参数
    • 运行测试
    • 构建项目
    • 注意事项
    • 集成应用
    • 更多项目

一个用于Spring Boot项目集成SeaweedFS S3协议的通用库,提供文件上传、下载、删除等操作。

源码

1、Spring Boot Starter  实现源码工程
https://github.com/ShouZhiDuan/easydo/tree/main/s3-seaweedfs
2、Spring Boot Starter Client Test 集成测试Example工程
https://github.com/ShouZhiDuan/easydo/tree/main/s3-seaweedfs/s3-seaweedfs-test

特性

  • 🚀 开箱即用的Spring Boot自动配置
  • 📁 完整的S3协议支持
  • 🛠️ 便捷的工具类和服务类
  • 🔧 灵活的配置选项
  • 📝 完善的单元测试
  • 🎯 高性能文件操作

环境要求

  • Java 17+
  • Maven 3.6+
  • Spring Boot 2.7+

快速开始

1. 添加依赖

在你的Spring Boot项目中添加以下依赖:

<dependency><groupId>com.techzhi.common</groupId><artifactId>s3-seaweedfs-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

2. 配置文件

application.yml 中添加SeaweedFS配置:

seaweedfs:s3:enabled: trueaccess-key: nvx1secret-key: nvx1bucket-name: gonganendpoint: http://192.168.60.70:38333region: us-east-1path-style-access-enabled: trueconnection-timeout: 10000request-timeout: 30000max-connections: 50

3. 使用方式

方式一:注入服务类
@Service
public class FileService {@Autowiredprivate SeaweedFsS3Service seaweedFsS3Service;public void uploadFile(String key, byte[] data) {seaweedFsS3Service.uploadFile(key, data, "application/octet-stream");}public byte[] downloadFile(String key) {return seaweedFsS3Service.getFileBytes(key);}
}
方式二:使用工具类
@RestController
public class FileController {@PostMapping("/upload")public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {String key = "uploads/" + file.getOriginalFilename();SeaweedFsS3Util.upload(key, file.getBytes(), file.getContentType());return "File uploaded successfully: " + key;}@GetMapping("/download/{key}")public ResponseEntity<byte[]> downloadFile(@PathVariable String key) {if (!SeaweedFsS3Util.exists(key)) {return ResponseEntity.notFound().build();}byte[] data = SeaweedFsS3Util.getBytes(key);return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + key + "\"").body(data);}
}

API 文档

SeaweedFsS3Service 主要方法

方法描述
uploadFile(key, inputStream, contentLength, contentType)上传文件流
uploadFile(key, data, contentType)上传字节数组
downloadFile(key)下载文件对象
getFileInputStream(key)获取文件输入流
getFileBytes(key)获取文件字节数组
deleteFile(key)删除文件
doesFileExist(key)检查文件是否存在
getFileMetadata(key)获取文件元数据
listFiles(prefix)列出指定前缀的文件
listAllFiles()列出所有文件
generatePresignedUrl(key, expiration)生成预签名URL
copyFile(sourceKey, destinationKey)复制文件

SeaweedFsS3Util 工具类方法

方法描述
upload(key, data, contentType)上传文件
download(key)下载文件
getBytes(key)获取文件字节数组
delete(key)删除文件
exists(key)检查文件是否存在
list(prefix)列出文件
generatePresignedUrl(key)生成预签名URL(1小时过期)
copy(sourceKey, destinationKey)复制文件

配置参数

参数默认值描述
seaweedfs.s3.enabledtrue是否启用SeaweedFS S3功能
seaweedfs.s3.access-keynvx1S3访问密钥
seaweedfs.s3.secret-keynvx1S3秘密密钥
seaweedfs.s3.bucket-namegongan存储桶名称
seaweedfs.s3.endpointhttp://192.168.60.70:38333SeaweedFS S3端点
seaweedfs.s3.regionus-east-1AWS区域
seaweedfs.s3.path-style-access-enabledtrue是否启用路径样式访问
seaweedfs.s3.connection-timeout10000连接超时时间(毫秒)
seaweedfs.s3.request-timeout30000请求超时时间(毫秒)
seaweedfs.s3.max-connections50最大连接数

运行测试

确保SeaweedFS服务正在运行,然后执行:

mvn test

构建项目

mvn clean install

注意事项

  1. 确保SeaweedFS服务已正确配置并启动S3网关
  2. 根据实际环境修改配置文件中的连接信息
  3. 在生产环境中,建议将敏感信息(如访问密钥)配置在环境变量中
  4. 大文件上传时,建议使用分片上传功能

集成应用

项目中如果需要用到以上的功能,可以快速集成。

https://github.com/ShouZhiDuan/easydo/blob/main/s3-seaweedfs/s3-seaweedfs-test/README.md

🔔:记得修改自己实际的相关服务配置。

更多项目

🔔:https://github.com/ShouZhiDuan/easydo/blob/main/README.md
在这里插入图片描述

http://www.xdnf.cn/news/12882.html

相关文章:

  • 三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计
  • 网络编程(TCP编程)
  • NVIC (嵌套向量中断控制器)是什么?
  • AI智能驱动浏览器工具Browser Use详解
  • 【动画】Unity2D骨骼动画-Animation2D
  • 知名的WordPress模板团队
  • 【西门子杯工业嵌入式-5-串口实现数据收发】
  • 算法打卡17天(补)
  • 03.数据类型
  • vue项目使用svg图标
  • 软件工程的软件生命周期通常分为以下主要阶段
  • 计算机网络基础总结:TCP/IP 模型、TCP vs UDP、DNS 查询过程
  • React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
  • Vue项目PDF目录功能集成【一】——方案深度思考
  • Android 线性布局中常见的冲突属性总结
  • 在网络排错中,经常会用到的操作命令和其作用
  • 剑指offer19_链表中倒数第k个节点
  • Jmeter(四) - 如何在jmeter中创建网络测试计划
  • protues仿真+C51+外部中断
  • MATLAB生成大规模无线通信网络拓扑(任意节点数量)
  • 微服务体系下将环境流量路由到开发本机
  • spring中的@KafkaListener 注解详解
  • NLP学习路线图(三十四): 命名实体识别(NER)
  • unity实现自定义粒子系统
  • java 时区时间转为UTC
  • 云原生架构赋能企业数字化转型:从理念到落地的系统性探索
  • springboot启动mapper找不到方法对应的xml
  • 【Redis/2】核心特性、应用场景与安装配置
  • 用于小目标检测的归一化高斯Wasserstein距离(NWD)之论文阅读
  • 国家奖学金答辩PPT+文稿