使用GitHub API上传图片后raw链接被屏蔽,如何获取国内可访问链接?
解决GitHub图片国内访问问题:生成user-images链接或替代方案
一、生成https://user-images.githubusercontent.com/****.jpeg格式的链接
这个链接是GitHub为Issue/PR评论附件提供的存储服务,不能通过仓库Contents API上传,得调用Issue评论上传接口,用multipart/form-data格式提交图片:
代码示例(Java)
// 先创建一个专门存图片的Issue(可设为私有),这里用编号1举例 String issueNumber = "1"; URL url = new URL("https://api.github.com/repos/{owner}/{repo}/issues/" + issueNumber + "/comments"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Authorization", "Bearer {access token}"); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"); connection.setDoOutput(true); DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); // 构造multipart请求体 String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"; outputStream.writeBytes("--" + boundary + "\r\n"); outputStream.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"{file-name}\"\r\n"); outputStream.writeBytes("Content-Type: image/jpeg\r\n\r\n"); // 写入你的图片字节流 byte[] imageBytes = ...; outputStream.write(imageBytes); outputStream.writeBytes("\r\n--" + boundary + "--\r\n"); outputStream.flush(); outputStream.close(); // 从响应中提取图片链接 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); // 用JSON工具解析响应,提取user-images链接 JSONObject jsonResponse = new JSONObject(response.toString()); String commentBody = jsonResponse.getString("body"); Pattern pattern = Pattern.compile("https://user-images\\.githubusercontent\\.com/[^)]+"); Matcher matcher = pattern.matcher(commentBody); if (matcher.find()) { String usableImageUrl = matcher.group(); // 这里拿到的就是目标格式的链接 }
说明:
- 需提前创建一个专门存储图片的Issue(私有Issue可避免公开内容)
- 上传后GitHub会自动把图片存到user-images服务器,链接会包含在评论内容里,从响应中提取即可
二、替代方案:用GitHub Pages访问图片
GitHub Pages的{owner}.github.io域名国内访问相对稳定,只需把图片上传到仓库的gh-pages分支:
修改现有代码实现
在原请求的JSON body中添加branch字段,指定上传到gh-pages分支:
String body = "{\n" + " \"message\": \"" + "myFirstImage" + "\",\n" + " \"content\": \"" + encodedImage + "\",\n" + " \"branch\": \"gh-pages\"\n" + "}";
上传完成后,图片访问链接为:https://{owner}.github.io/{repo}/{file-name}
三、注意事项
user-images.githubusercontent.com的链接依赖对应的Issue评论,删除评论会导致图片失效- GitHub Pages需先在仓库设置中启用,分支选择
gh-pages - 两种方式都要求你的GitHub Access Token拥有
repo权限
内容的提问来源于stack exchange,提问作者Daksh Rawal
相关产品推荐
相关产品推荐

