Spring Boot对接七牛云存储的详细步骤和流程
作者:奇妙智能
这篇文章主要介绍了SpringBoot对接七牛云存储的完整流程,涵盖注册账号、配置项目、文件上传/删除/下载及列表查询、前端集成等步骤,并强调了安全性、异常处理及扩展功能如图片处理等,需要的朋友可以参考下
以下是 Spring Boot 对接七牛云存储的详细步骤和流程,结合了多个开发实践和最佳方案:
一、前期准备
注册七牛云账号
- 访问七牛云官网,完成注册并登录。
- 进入「密钥管理」获取
Access Key和Secret Key(用于鉴权)。
创建存储空间(Bucket)
- 在控制台选择「对象存储」,创建新的存储空间,命名后记录
Bucket 名称。 - 设置存储空间属性(如存储类型、地域等),获取存储空间的访问域名(如
http://xxx.bkt.clouddn.com)。
二、Spring Boot 项目配置
1. 添加依赖
在 pom.xml 中引入七牛云 Java SDK:
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.7.99]</version>
</dependency>
注意:版本号需根据最新网页调整。
2. 配置参数
在 application.yml 中添加七牛云配置:
qiniu: accessKey: your_access_key secretKey: your_secret_key bucket: your_bucket_name domain: http://xxx.bkt.clouddn.com # 存储空间访问域名 region: huadong # 存储空间所在地域(如华东:huadong)
3. 配置类
创建 QiniuProperties 类绑定配置:
@Data
@ConfigurationProperties(prefix = "qiniu")
public class QiniuProperties {
private String accessKey;
private String secretKey;
private String bucket;
private String domain;
private String region;
}
三、实现文件上传功能
1. 工具类开发
创建 QiniuUtils 工具类,封装上传逻辑:
@Component
public class QiniuUtils {
@Autowired
private QiniuProperties qiniuProperties;
// 上传文件到七牛云
public String uploadFile(MultipartFile file) {
try {
Configuration cfg = new Configuration(Region.region2()); // 根据实际地域选择
UploadManager uploadManager = new UploadManager(cfg);
Auth auth = Auth.create(qiniuProperties.getAccessKey(), qiniuProperties.getSecretKey());
String upToken = auth.uploadToken(qiniuProperties.getBucket());
// 生成唯一文件名(避免重复)
String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
// 上传并解析结果
Response response = uploadManager.put(file.getBytes(), fileName, upToken);
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
// 返回完整访问路径
return qiniuProperties.getDomain() + "/" + putRet.key;
} catch (Exception e) {
throw new RuntimeException("上传失败:" + e.getMessage());
}
}
}
关键点:
- 使用 Region 指定存储区域(如 Region.huadong() 对应华东)。
- 文件名通过 UUID 生成唯一标识,保留原始后缀。
2. Controller 层
创建接口接收前端上传请求:
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private QiniuUtils qiniuUtils;
@PostMapping("/upload")
public R uploadFile(@RequestParam("file") MultipartFile file) {
String url = qiniuUtils.uploadFile(file);
return R.success(url);
}
}
四、扩展功能
1. 文件下载
通过七牛云域名直接访问文件,或生成带签名的临时下载链接:
public String generateDownloadUrl(String key) {
Auth auth = Auth.create(accessKey, secretKey);
return auth.privateDownloadUrl(domain + "/" + key, 3600); // 1小时有效
}
2. 文件删除
使用 BucketManager 删除指定文件:
public void deleteFile(String key) {
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, config);
bucketManager.delete(bucketName, key);
}
3. 文件列表查询
遍历存储空间中的文件(分页处理):
public List<String> listFiles(String prefix, String marker) {
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, config);
BucketManager.FileListIterator fileListIterator =
bucketManager.createFileListIterator(bucketName, prefix, 1000, marker);
List<String> fileList = new ArrayList<>();
while (fileListIterator.hasNext()) {
FileInfo[] items = fileListIterator.next();
for (FileInfo item : items) {
fileList.add(item.key);
}
}
return fileList;
}
五、前端集成示例
1. HTML 表单
<form action="/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
2. AJAX 上传(jQuery)
$.ajax({
url: "/file/upload",
type: "POST",
data: new FormData($("#uploadForm")[0]),
processData: false,
contentType: false,
success: function(res) {
console.log("上传成功:" + res.data);
}
});
六、注意事项
文件大小限制
- 在
application.yml中配置:
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
异常处理
- 添加全局异常处理器,捕获七牛云 SDK 抛出的
QiniuException。
安全性
- 敏感操作(如删除)需添加权限校验。
- 临时下载链接建议设置短有效期。
通过以上步骤,即可实现 Spring Boot 与七牛云存储的完整对接,支持文件上传、下载、删除及列表查询等核心功能。实际开发中可根据需求扩展图片处理(如缩略图)、水印添加等高级功能。
以上就是Spring Boot对接七牛云存储的详细步骤和流程的详细内容,更多关于Spring Boot对接七牛云存储的资料请关注脚本之家其它相关文章!
