Spring Boot集成七牛云对象存储oss

本文详细介绍了七牛云对象存储Kodo的服务特点,并提供了配置七牛云账号、创建存储空间及上传文件的步骤。此外,还展示了如何在SpringBoot应用中集成七牛云SDK,包括添加依赖、配置YML、编写工具类以及控制器,实现了文件的上传、列举、下载链接获取和批量删除功能。
摘要由CSDN通过智能技术生成

1、什么是对象存储服务

对象存储服务(Object Storage Service)是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。

2、七牛云对象存储 Kodo 概述

七牛云对象存储 Kodo 是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。可通过控制台、API、SDK 等方式简单快速地接入七牛存储服务,实现海量数据的存储和管理。通过 Kodo 可以进行文件的上传、下载和管理。
Kodo Browser可视化工具下载地址

3、配置七牛云并进行测试

  • 3.1 注册七牛云帐号并实名认证领取免费存储空间

七牛云官网
在这里插入图片描述

  • 3.2 进入控制台,选择对象存储Kodo,新建空间
    在这里插入图片描述
    在这里插入图片描述

  • 3.3 上传文件进行测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 3.4 在浏览器地址栏中粘贴刚刚复制的外链,能够看到刚才上传的文件说明配置成功
    在这里插入图片描述

4、Spring Boot集成七牛云

官方sdk地址

  • 4.1在pom.xml中添加maven依赖
<dependency>
     <groupId>com.qiniu</groupId>
     <artifactId>qiniu-java-sdk</artifactId>
     <version>7.7.0</version>
</dependency>
  • 4.2 编写yml配置文件
qiniu:
  kodo: 
    # 配置accessKey
    accessKey: accessKey
    # 配置secretKey
    secretKey: secretKey
    # 配置空间名称
    bucket: bucket
    # 配置域名
    domain: domain

accessKey和secretKey在密钥管理中查询,空间名称如下图,域名在cdn—>域名管理中查询
在这里插入图片描述

  • 4.3 新建并编写QiniuKodoUtil工具类

在这里插入图片描述

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.*;
import com.qiniu.storage.model.BatchStatus;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Component
public class QiniuKodoUtil {
    /**
     * 构造一个带指定 Region 对象的配置类,因为我的是华南机房,所以为Region.region2()
     */
    Configuration cfg = new Configuration(Region.region2());
    @Value("${qiniu.kodo.accessKey}")
    String accessKey;
    @Value("${qiniu.kodo.secretKey}")
    String secretKey;
    @Value("${qiniu.kodo.bucket}")
    String bucket;
    @Value("${qiniu.kodo.domain}")
    String domain;
    /**
     * 文件名前缀
     */
    String prefix = "";
    /**
     * 每次迭代的长度限制,最大1000,推荐值 1000
     */
    int limit = 1000;
    /**
     * 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
     */
    String delimiter = "";

    /**
     * 列举空间文件列表
     */
    public void listSpaceFiles() {
        Auth auth = Auth.create(accessKey, secretKey);
        BucketManager bucketManager = new BucketManager(auth, cfg);
        BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter);
        while (fileListIterator.hasNext()) {
            //处理获取的file list结果
            FileInfo[] items = fileListIterator.next();
            for (FileInfo item : items) {
                System.out.println(item.key);
                System.out.println(item.fsize / 1024 + "kb");
                System.out.println(item.mimeType);
            }
        }
    }

    /**
     * 上传本地文件
     */
    public void upload(String localFilePath) {
        UploadManager uploadManager = new UploadManager(cfg);
        /**
         *  如果是Windows情况下,格式是 D:\\qiniu\\test.png
         * 以文件最低级目录名作为文件名
         */
        String[] strings = localFilePath.split("\\\\");
        String key = strings[strings.length - 1];
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        try {
            Response response = uploadManager.put(localFilePath, key, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
    }

    /**
     * 获取下载文件的链接
     *
     * @param fileName 文件名称
     * @return 下载文件的链接
     */
    public String getFileUrl(String fileName) throws UnsupportedEncodingException {
        String encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
        String finalUrl = String.format("%s/%s", "http://" + domain, encodedFileName);
        System.out.println(finalUrl);
        return finalUrl;
    }

    /**
     * 批量删除空间中的文件
     *
     * @param fileList 文件名称列表
     */
    public void deleteFile(String[] fileList) {
        Auth auth = Auth.create(accessKey, secretKey);
        BucketManager bucketManager = new BucketManager(auth, cfg);
        try {
            //单次批量请求的文件数量不得超过1000
            BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations();
            batchOperations.addDeleteOp(bucket, fileList);
            Response response = bucketManager.batch(batchOperations);
            BatchStatus[] batchStatusList = response.jsonToObject(BatchStatus[].class);
            for (int i = 0; i < fileList.length; i++) {
                BatchStatus status = batchStatusList[i];
                String key = fileList[i];
                System.out.print(key + "\t");
                if (status.code == 200) {
                    System.out.println("delete success");
                } else {
                    System.out.println(status.data.error);
                }
            }
        } catch (QiniuException ex) {
            System.err.println(ex.response.toString());
        }
    }
}
  • 4.4 新建并编写QiniuKodoController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;

@RestController
@RequestMapping("qiniukodo")
public class QiniuKodoController {

    @Resource
    QiniuKodoUtil qiniuKodoUtil;


    @RequestMapping("upload")
    public void upload(String localFilePath) {
        qiniuKodoUtil.upload(localFilePath);
    }

    @RequestMapping("listSpaceFiles")
    public void listSpaceFiles() {
        qiniuKodoUtil.listSpaceFiles();
    }
    
    @RequestMapping("getFileUrl")
    public void getFileUrl(String fileName) {
        try {
            qiniuKodoUtil.getFileUrl(fileName);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    @RequestMapping("deleteFile")
    public void deleteFile(String[] fileList) {
        qiniuKodoUtil.deleteFile(fileList);
    }
}
  • 4.5 测试接口是否可用

初始无文件
在这里插入图片描述
上传文件
在这里插入图片描述
在这里插入图片描述
列举空间文件列表
在这里插入图片描述
在这里插入图片描述
获取下载文件的链接
在这里插入图片描述
在这里插入图片描述

批量删除空间中的文件

  • 为测试批量,我又上传了几个文件进行测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
1. 添加七牛云OSS依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.999.999]</version> </dependency> ``` 2. 配置七牛云OSS 在application.properties文件中添加以下配置: ``` # 七牛云OSS配置 qiniu.accessKey=your_access_key qiniu.secretKey=your_secret_key qiniu.bucket=your_bucket_name qiniu.pathPrefix=http://your_domain_name/ qiniu.zone=auto ``` 其中,`accessKey`和`secretKey`是七牛云账号的Access Key和Secret Key,`bucket`为存储空间名称,`pathPrefix`为访问域名前缀,`zone`为存储区域,这里设置为自动选择。 3. 创建七牛云OSS服务类 创建一个名为`QiniuOSSService`的类,用于封装七牛云OSS的操作方法。 ``` @Service public class QiniuOSSService { @Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.secretKey}") private String secretKey; @Value("${qiniu.bucket}") private String bucket; @Value("${qiniu.pathPrefix}") private String pathPrefix; private Configuration configuration = new Configuration(Zone.autoZone()); private UploadManager uploadManager = new UploadManager(configuration); /** * 上传文件 * * @param file 文件 * @return 文件URL * @throws QiniuException 七牛云异常 */ public String uploadFile(File file) throws QiniuException { Auth auth = Auth.create(accessKey, secretKey); String token = auth.uploadToken(bucket); Response response = uploadManager.put(file, null, token); DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); return pathPrefix + putRet.key; } /** * 删除文件 * * @param key 文件key * @throws QiniuException 七牛云异常 */ public void deleteFile(String key) throws QiniuException { Auth auth = Auth.create(accessKey, secretKey); BucketManager bucketManager = new BucketManager(auth, configuration); bucketManager.delete(bucket, key); } } ``` 其中,`uploadFile`方法用于上传文件到七牛云OSS并返回文件URL,`deleteFile`方法用于删除文件。 4. 使用七牛云OSS服务类 在需要上传或删除文件的地方,注入`QiniuOSSService`并调用相应的方法即可。例如: ``` @RestController public class FileController { @Autowired private QiniuOSSService qiniuOSSService; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException, QiniuException { File tempFile = File.createTempFile("temp", null); file.transferTo(tempFile); String fileUrl = qiniuOSSService.uploadFile(tempFile); tempFile.delete(); return fileUrl; } @DeleteMapping("/delete") public void deleteFile(@RequestParam("key") String key) throws QiniuException { qiniuOSSService.deleteFile(key); } } ``` 这里提供了一个上传和删除文件的示例接口,上传的文件可以是`MultipartFile`类型,需要先将其转换为`File`类型。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值