1、什么是对象存储服务
对象存储服务(Object Storage Service)是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。
2、七牛云对象存储 Kodo 概述
七牛云对象存储 Kodo 是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。可通过控制台、API、SDK 等方式简单快速地接入七牛存储服务,实现海量数据的存储和管理。通过 Kodo 可以进行文件的上传、下载和管理。
Kodo Browser可视化工具下载地址
3、配置七牛云并进行测试
- 3.1 注册七牛云帐号并实名认证领取免费存储空间
4、Spring Boot集成七牛云
- 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 测试接口是否可用
批量删除空间中的文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71493.html