侧边栏壁纸
博主头像
Lang博主等级

十七岁想打职业。

  • 累计撰写 10 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论
隐藏侧边栏

Gitee作为图床与Springboot自定义starter

Lang
2022-01-11 / 0 评论 / 0 点赞 / 94 阅读 / 2,292 字
温馨提示:
本文最后更新于 2022-01-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

0

评论