Spring Boot对接七牛云存储的详细步骤和流程

 更新时间:2025年08月04日 09:51:10   作者:奇妙智能  
这篇文章主要介绍了SpringBoot对接七牛云存储的完整流程,涵盖注册账号、配置项目、文件上传/删除/下载及列表查询、前端集成等步骤,并强调了安全性、异常处理及扩展功能如图片处理等,需要的朋友可以参考下

以下是 Spring Boot 对接七牛云存储的详细步骤和流程,结合了多个开发实践和最佳方案:

​​一、前期准备​​

​注册七牛云账号​

  • 访问七牛云官网,完成注册并登录。
  • 进入「密钥管理」获取 Access KeySecret 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对接七牛云存储的资料请关注脚本之家其它相关文章!

相关文章

  • 在Spring中编写事务的介绍

    在Spring中编写事务的介绍

    今天小编就为大家分享一篇关于在Spring中编写事务的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 一文搞懂hashCode()和equals()方法的原理

    一文搞懂hashCode()和equals()方法的原理

    这篇文章主要介绍了详解hashCode()和equals()的本质区别和联系,本文先对两种方法作了介绍,然后对二者联系进行分析,具有一定参考价值,需要的朋友可以了解下
    2020-06-06
  • TransmittableThreadLocal线程间传递逻辑示例解析

    TransmittableThreadLocal线程间传递逻辑示例解析

    这篇文章主要介绍了TransmittableThreadLocal线程间传递逻辑示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • java递归实现拼装多个api的结果操作方法

    java递归实现拼装多个api的结果操作方法

    本文给大家分享java递归实现拼装多个api的结果的方法,说白了就是好几个API结果拼装成的,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • JVM原理之完整的一次GC流程解读

    JVM原理之完整的一次GC流程解读

    这篇文章主要介绍了JVM原理之完整的一次GC流程解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Java使用easyExcel批量导入数据详解

    Java使用easyExcel批量导入数据详解

    这篇文章主要介绍了Java使用easyExcel批量导入数据详解,通常我们会提供一个模板,此模块我们可以使用easyExcel导出数据生成的一个Excel文件当作模板,提供下载链接,用户在该文件内填入规定的数据格式以后可以批量导入数据到数据库中,需要的朋友可以参考下
    2023-08-08
  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    Springboot中MyBatisplus使用IPage和Page分页的实例代码

    这篇文章主要介绍了Springboot中MyBatisplus使用IPage和Page分页,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 分享Spring的下载组件

    分享Spring的下载组件

    这篇文章主要为大家分享了Spring的下载组件,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 三种简单排序算法(使用java实现)

    三种简单排序算法(使用java实现)

    下面小编就为大家带来一篇三种简单排序算法(使用java实现)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Java行为型设计模式之策略模式详解

    Java行为型设计模式之策略模式详解

    策略模式属于Java-设计模式中行为模式之一,该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。本文将通过示例详细讲解这一模式,需要的可以参考一下
    2022-11-11

最新评论