原创

永久免费的oss+cdn实现方式

1、前言

cdn+oss+https组合起来,还永久免费,很多人听起来觉得我是在开玩笑,其实不然,还真的是有这么一个实现方式。

注意额,我说的是永久免费,市面上仅有七牛云、又拍云提供少量的实名免费套餐,而且仅限于http。先来一个我基于这个理论实现的一个免费的图床给大家看下。体验地址:https://www.chenzhuofan.top/figurebed

效果图如下:

image-20201130133051128

2、实现的原理

  • github实现资源文件的托管
  • jsdelivr实现github的文件的cdn加速。(国内访问github的速度的确是有点慢)

3、细节说明

3.1、 GitHub配置

1. 创建Repository

鼠标移动到右上角,点击"New repository"按钮:

img

填写相关信息,创建一个存储图片的仓库:

img

2. 配置token key
生成一个Token用于操作GitHub repository。回到主页,点击"Settings"按钮:

img

进入页面后,点击"Developer settings"按钮

img

点击"Personal access tokens"按钮,然后点击Generate token:

img

填写描述,选择"repo"权限,然后拉到下面点击"Generate token"按钮

img
img

注意:创建成功后,会生成一串token,这串token之后不会再显示,所以第一次看到的时候,可以用个小本本保存起来哦,忘记了只有重新生成,每次都不一样。

详细教程参见:https://www.cnblogs.com/chen-xing/p/14054218.html

3.2、 GitHub api的调用

核心的代码如下:

public static boolean create(String url, byte[] bytes, String token) {
        Map<String, String> bodyMap = Maps.newConcurrentMap();
        bodyMap.put("message", "图床提交");
        bodyMap.put("content", Base64.getEncoder().encodeToString(bytes));

        HttpResponse httpResponse =
                HttpRequest.put(url)
                        .header("Content-Type", "application/json")
                        .header("Authorization", MessageFormat.format("token {0}", token))
                        .body(new Gson().toJson(bodyMap)).timeout(4000)
                        .execute();
        boolean result=new Integer(201).equals(httpResponse.getStatus());
        if(!result){
            log.error("image upload github error:{}",httpResponse.body());
        }
        return result;
    }

这里只是涉及到上传文件,更多的github api v3的介绍参见:https://www.cnblogs.com/chen-xing/p/14058096.html

3.3、jsdelivr 加速

jsDelivr官网提供了github、npm、wordpress这三个直观例子,有兴趣的道友可以去官网了解

一、访问github的用法

https://fastly.jsdelivr.net/gh/用户名称/仓库名称@版本号/目录

二、访问npm的用法

https:``//fastly.jsdelivr.net/npm/包名@版本号/目录

三、访问wordpress的用法

正文到此结束
本文目录