七牛云简介
七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。
七牛云对象存储 Kodo 是七牛云提供的高可靠、强安全、低成本、可扩展的存储服务。您可通过控制台、API、SDK 等方式简单快速地接入七牛存储服务,实现海量数据的存储和管理。通过 Kodo 可以进行文件的上传、下载和管理。
总的来说:七牛云是为开发服务的云存储环境,可以在七牛云上托管静态文件资源,并且进行下载,还有很多七牛云的sdk。
具体有关七牛云的介绍可以参考开发文档:https://developer.qiniu.com/kodo
七牛云使用前
-
首先先去七牛云官方注册一个账号——>七牛云官方,注册完毕之后,点击个人中心
-
然后进行身份认证,按照步骤进行认证(1-2天认证完成)
-
当身份认证完成之后,再点击对象存储,然后新建存储空间
-
然后会进入一个界面,让你输入空间名称还有存储区域,以及访问控制,按照要求填写即可
-
创建好空间之后就可以对空间进行管理,也可以绑定域名
如果需要使用七牛云进行api接口开发,就必须要进行备案域名的绑定,且要对域名进行按要求解析
(刚注册的时候好像有免费的测试使用域名,但是我有自己的域名就没有使用测试域名)
-
域名绑定与解析
点击空间管理,进入域名管理,即可以添加绑定域名。
进入添加域名的界面后,按要求填写相关信息即可(域名一定要是备案域名)
绑定了域名之后,会有一个审核时间(差不多5-10分钟),之后就可以对域名进行解析。
接下来参考官方文档的解析过程:如何配置域名的 CNAME
我使用的域名是泛子域名,用的是腾讯云的域名:
根据文档对在七牛云上绑定了的域名做对应的记录值解析即可。
-
完成以上的操作就可以使用七牛云sdk进行开发了。
使用七牛云SDK开发
主要使用的java的sdk,也可以根据自己的需求参考官方文档:https://developer.qiniu.com/kodo
开发步骤
- 导入SDK坐标
<!--七牛云-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.7</version>
</dependency>
<!--工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17-beta1</version>
</dependency>
- 编写配置信息(application.properties)
qiniu.ACCESS_KEY=七牛云AK
qiniu.SECRET_KEY=七牛云SK
qiniu.bucketname=七牛云创建空间的名称
qiniu.QINIU_IMAGE_DOMAIN=七牛云绑定的域名
七牛云的配置信息都可以在个人中心拿到,其中AK和SK:点击密钥管理
- 编写七牛云相关的配置文件(QiNiuConfig.java)
package cn.kt.qinu_demo.config;
import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author tao
* @date 2021-03-28 1:25
* 概要:
*/
@Data
@Component
//从配置文件里获取
@ConfigurationProperties(prefix = "qiniu")
public class QiNiuConfig {
// 设置好账号的ACCESS_KEY
private String ACCESS_KEY;
// 设置好账号的SECRET_KEY
private String SECRET_KEY;
// 设置七牛要上传的空间
private String bucketname;
// 设置关联七牛的域名
private String QINIU_IMAGE_DOMAIN;
// 密钥配置
public Auth getAuth() {
// 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
return auth;
}
/* 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
华东:zone0
华北:zone1
华南:zone2
北美:zoneNa0
*/
public Configuration getConfiguration() {
Configuration cfg = new Configuration(Zone.zone2());
return cfg;
}
// 构造一个七牛manager
public UploadManager getUploadManager() {
UploadManager uploadManager = new UploadManager(getConfiguration());
return uploadManager;
}
// 构造一个七牛manager
public BucketManager getBucketManager() {
BucketManager bucketManager = new BucketManager(getAuth(), getConfiguration());
return bucketManager;
}
// 简单上传,使用默认策略
// ,只需要设置上传的空间名就可以了
public String getUpToken() {
return getAuth().uploadToken(getBucketname());
}
}
- 编写操作七牛的工具类(QiNiuUtil.java)
package cn.kt.qinu_demo.utils;
import cn.kt.qinu_demo.config.QiNiuConfig;
import com.alibaba.fastjson.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
* @author tao
* @date 2021-03-27 17:19
* 概要:操作七牛云的工具类
*/
@Component
@Slf4j
public class QiNiuUtil {
@Autowired
private QiNiuConfig config;
private static QiNiuConfig qiNiuConfig;
//初始化静态参数
//通过@PostConstruct实现初始化bean之前进行的操作
@PostConstruct
public void init() {
qiNiuConfig = config;
}
//储存图片文件
public static String saveFile(MultipartFile file, String fileName) throws IOException {
try {
// 调用put方法上传
Response res = qiNiuConfig.getUploadManager().put(file.getBytes(), fileName, qiNiuConfig.getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return qiNiuConfig.getQINIU_IMAGE_DOMAIN() + JSONObject.parseObject(res.bodyString()).get("key");
} else {
log.error("七牛异常:" + res.bodyString());
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
log.error("七牛异常:" + e.getMessage());
return null;
}
}
//储存图片文件
public static String deleteFile(String fileName) throws IOException {
BucketManager bucketManager = qiNiuConfig.getBucketManager();
try {
//七牛云删除
bucketManager.delete(qiNiuConfig.getBucketname(), fileName);
//数据库删除
return "success";
} catch (QiniuException ex) {
//数据库删除
return "failed";
}
}
//获取UUID+Date的文件名
public static String getUUIDFileNameNow(String fileName) {
int dotPos = fileName.lastIndexOf(".");
if (dotPos < 0) {
return null;
}//获取文件后缀
String fileExt = fileName.substring(dotPos + 1).toLowerCase();
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS");
String nowStr = "-" + format.format(date);
String result = UUID.randomUUID().toString().replaceAll("-", "") + nowStr + "." + fileExt;
return result;
}
}
-
编写操作文件的工具类
相关代码和介绍参考我上一篇博客:
个人博客网站:http://qkongtao.cn/?p=560
CSDN:https://blog.csdn.net/qq_42038623/article/details/114823328?spm=1001.2014.3001.5501
-
编写Controller层(QiNiuController.java)
主要写了两个接口方法:
- 文件上传,返回文件src路径
- 删除文件:根据文件名删除存储在七牛云上的文件
在代码中可以自己添加Service层和Dao层,对文件信息进行数据库持久层存储
代码如下:
package cn.kt.qinu_demo.controller;
import cn.kt.qinu_demo.utils.FileUtil;
import cn.kt.qinu_demo.utils.QiNiuUtil;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author tao
* @date 2021-03-27 17:52
* 概要:
*/
@Controller
public class QiNiuController {
//文件上传
@RequestMapping(value = "/testUpload", method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
//判断文件是否为空
if (file.isEmpty()) {
return "error";
}
//获取文件后缀
String suffix = FileUtil.getExtensionName(file.getOriginalFilename());
//获取文件类型
String type = FileUtil.getFileType(suffix);
//获取文件大小
FileUtil.getSize(file.getSize());
//获取UUID+date文件名
String fileName = QiNiuUtil.getUUIDFileNameNow(file.getOriginalFilename());
//获取文件上传七牛云后的url
String fileUrl = QiNiuUtil.saveFile(file, fileName);
/**************************** 在这可以将数据信息进行数据库存储 **************************/
return "src:" + fileUrl;
}
//文件删除
@RequestMapping(value = "/testDelete", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@RequestParam("fileName") String fileName) throws IOException {
String res = QiNiuUtil.deleteFile(fileName);
return res;
}
}
开发接口测试
- 上传图片测试
-
Postman测试
-
七牛云上的文件管理
- 删除文件测试
- Postman测试
- 七牛云上的文件管理
- 当然上传视频也是可以的
源码下载
七牛云上传的项目源码见下一篇博客:图片上传api——chevereto个人图床搭建