首先是准备工作,打开设置
选择私人令牌 ,生成一个令牌(为了调用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~~~ 现在只能手动点击更新~~~部署完成就可以访问了!!!