gitee搭建个人图床

首先是准备工作,打开设置

选择私人令牌 ,生成一个令牌(为了调用api上传图片)

api文档 https://gitee.com/api/v5/swagger#/postV5ReposOwnerRepoContentsPath 选择仓库->新建文件,接下来会用到!!!

接下来创建一个图床库。选择新建仓库

 

然后点击服务选择Gitee Pages

点击开启,生成一个链接,这就是图床的地址

启动后就会看到链接!

测试一下,上传文件

上传完成,访问一下看是不是搭建成功,输入url(生成的链接拼上图片)会发现访问失败404。。具体原因我也不清楚,如果出现这种情况,点击更新,重新部署一下就可以啦。

然后就访问成功了!!!效果图如下

接下来用代码演示一下上传图片~~~

说一下文档中必传字段的意思

字段说明:

access_token :这个access_token就是指我们上面申请的私人令牌。
owner :就是你码云账号的名称
repo : 就是上面创建的仓库名称
path :就是文件名称。
content :文件内容,这里注意 文档上说明内容必须是以Base64编码的,这就意味着内容不能太大。
message :提交信息。

上代码:(代码里有详细解释,其中跨域请求用的 RestTemplate,状态码处理以及异常处理暂时没加

先配置一下RestTemplate:

@Configuration
public class RestTemplateConfig {

    @Bean("restTemplate")
    public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory){
        return new RestTemplate(clientHttpRequestFactory);
    }

    @Bean("clientHttpRequestFactory")
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(10000);
        factory.setReadTimeout(30000);
        return factory;
    }
}

下面是utils: 

public class MyImageUtils {

    //这个常量是码云分配的私人令牌(Token)
    private static String ACCESS_TOKEN = "be7e75ee2a8a1484c88dc79d3ca1cb53";

    //仓库所属地址
    private static String OWNER = "lgz0921";

    //仓库名称
    private static String REPO = "my-image";

    //上传图片的message
    private static String MESSAGE = "简单图床";

    //上传地址自定义。
    private static final String PATH = "img/";

    /**
     * 新建文件
     * <p>
     * owner*   仓库所属空间地址(企业、组织或个人的地址path)
     * repo*    仓库路径
     * path*    文件的路径
     * content* 文件内容, 要用 base64 编码
     * message* 提交信息
     * <p>
     * %s =>仓库所属空间地址(企业、组织或个人的地址path)  (owner)
     * %s => 仓库路径(repo)
     * %s => 文件的路径(path)
     */
    //上传文件
    private static final String CREATE_REPOS_URL = "https://gitee.com/api/v5/repos/%s/%s/contents/%s";

    /***
     * %s =>仓库所属空间地址(企业、组织或个人的地址path)  (owner)
     * %s => 仓库路径(repo)
     */
    //刷新图床
    private static final String BUILD_PAGE_URL = "https://gitee.com/api/v5/repos/%s/%s/pages/builds";

    //访问的链接,前面公共部分
    private static String IMAGE_URL = "http://lgz0921.gitee.io/my-image/";

    public static Map<String, String> uploadImg(File file, RestTemplate restTemplate) {
        Map<String,String> map = new HashMap<>();

        String trueFileName = file.getName();
        // 断言
        String suffix = trueFileName.substring(trueFileName.lastIndexOf("."));
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
        String paramImgFile = Base64.encodeBase64String(getFileBytes(file));

        //填充
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("access_token", ACCESS_TOKEN);
        paramMap.put("message", MESSAGE);
        paramMap.put("content", paramImgFile);

        String targetDir = PATH + fileName;
        String requestUrl = String.format(CREATE_REPOS_URL, OWNER, REPO, targetDir);

        //上传请求
        getResponseEntity(restTemplate, paramMap, requestUrl);
        map.put("url",IMAGE_URL+targetDir);

        //刷新图床,不刷新,路径访问不到(404)目前这样还没有效果,呜呜~~求大佬告知
        Map<String, Object> paramMapBuild = new HashMap<>();
        paramMapBuild.put("access_token", ACCESS_TOKEN);
        String requestUrlBuild = String.format(BUILD_PAGE_URL, OWNER, REPO);
        getResponseEntity(restTemplate, paramMapBuild, requestUrlBuild);

        return map;
    }

    private static ResponseEntity<JSONObject> getResponseEntity(RestTemplate restTemplate, Map<String, Object> paramMapBuild, String requestUrlBuild) {
        return restTemplate.exchange(requestUrlBuild, HttpMethod.POST, new HttpEntity<>(paramMapBuild), JSONObject.class);
    }


    public static byte[] getFileBytes(File file) {
        byte[] buff = new byte[0];
        try (FileInputStream fin = new FileInputStream(file)) {
            buff = new byte[fin.available()];
            fin.read(buff);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buff;
    }

}

使用方法:

@SpringBootTest
class MyImageTests {

    //跨域请求用到
    @Autowired
    RestTemplate restTemplate;

    @Test
    void uploadImg() {
        Map<String, String> map = MyImageUtils.uploadImg(new File("C:\\Users\\WEIMOB\\Desktop\\keNan.jpg"), restTemplate);
        //访问的路径
        System.out.println(map.get("url"));
    }

}

目前有一个问题,就是图床刷新api没有起作用,测试了一下好像需要收费,有大佬知道怎么办求告知!!!不刷新会404~~~  现在只能手动点击更新~~~部署完成就可以访问了!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心脏dance

如果解决了您的疑惑,谢谢打赏呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值