1.概述
图床就是指一个图片服务器,上传图片到图床后返回一个公网URL。可用于系统的图片存储,markdown文档编写中贴图等。
目前免费的图床也有很多种,比如路过图床,ImgURL图床。说是免费但存储在别人服务器,哪天收费了,或者蹦了,我们的图片也就没了。国内许多供应商提供的对象存储产品大多是收费的,比如腾讯云Cos,阿里云。但也有免费的,如七牛云和又拍云有免费10G存储空间。这种就比较安全稳定,且提供自定义域名,防盗链等贴心功能。如果咱们有台云服务器,自己使用nginx,tomcat搭建图片服务器也未尝不可,但就是图片没有可视化的管理,防盗链等等功能都得自己实现。这时候我又想起了Minio,一套完整的开源的对象存储服务。
而最近使用utools的图床插件,发现它可以配置Gitee图床。
然后折腾了一下,原来是Gitee提供了上传API。那就好办了。
2.Gitee图床怎么玩?
首先观察API,发现必填的要输入6个参数。
//{}中的变量填入对应说明的值。
https://gitee.com/api/v5/repos/{owner}/{repo}/contents/{path}
①access_token:
Gitee设置 -> 私人令牌 -> 生成新令牌 -> 提交
②其他信息
创建一个仓库作为图床的存储地址。注意仓库要选择开源。
获取到 owner 和 repo
path 为仓库的路径+"/"+文件名
content 为图片的base64编码
massage 随便填
3. utools中使用
配置完后上传贼方便。
4. 集成到代码中
//核心代码
private final String API_CREATE_POST = "https://gitee.com/api/v5/repos/%s/%s/contents/%s";
@Override
public String upload(byte[] data, String resourcesName) {
String targetUrl = String.format(this.API_CREATE_POST,
this.ossGiteeProperties.getOwner(),
this.ossGiteeProperties.getRepo(),
this.ossGiteeProperties.getBaseDisc() + resourcesName);
//请求体封装
Map<String, Object> uploadBodyMap = this.getUploadBodyMap(data);
//这里使用的是hutool的http工具类
String ret = HttpUtil.post(targetUrl, uploadBodyMap);
JSONObject jsonObject = JSONUtil.parseObj(ret);
if(ObjectUtil.isEmpty(jsonObject)){
logger.error("上传失败");
return null;
}
String url = jsonObject.getJSONObject("content").getStr("download_url");
logger.info("上传成功:{}",url);
return url;
}
5. 整合到springboot starter里
之前已经写过了一个集成了 七牛云,又拍云,minio对象存储的starter,现在gitee也整合进去了,并做了一些优化。
使用方式
pom引入 需要下载jar 本地安装
<dependency>
<groupId>cn.yr</groupId>
<artifactId>yr-oss-spring-boot-starter</artifactId>
<version>3.0-SNAPSHOT</version>
</dependency>
yml配置
oss:
upy:
# 是否开启配置 又拍云 七牛云 Minio开启需要引入对应sdk
enabled: true
username: admin
password: xxxx
bucket: langi-mg
domain: https://cdn.jy520.fun
base-disc: oss
gitee:
enabled: true
base-disc: oss
access-token: xxxx
owner: langzh
repo: pic
使用
@RestController
public class TestController {
//注入对应的handler
@Autowired
private OssGiteeHandler ossGiteeHandler;
@RequestMapping("upload")
public String upload(MultipartFile file){
String url = "";
try {
url = ossGiteeHandler.upload(file.getBytes(), file.getOriginalFilename());
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
}
源码地址:https://gitee.com/langzh/yr-oss-spring-boot-starter.git
评论