我想为我的Minecraft-Mod编写自己的Mod安装程序。 有一个问题:我想使用GitHub发布来下载首选版本。
这里的链接(如:https://github.com/TheOnlySilverClaw/Reforged/releases/download/v0.6-alpha/reforged-0.6-alpha-1.8.jar)不是直接链接,所以我不能使用OutputStream直接从它们下载。
“直接”链接是这样的:https://github-cloud.s3.amazonaws.com/releases/48553472/d19e9d64-d436-11e5-802b-9cc751a6de68.jar?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJMK3TQ%2F20160228%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20160228T223303Z&X-Amz-Expires=300&X-Amz-Signature=664ca72a54472e2ef7c3e4c5a0e9e552607b010bdf43c83c967319eb0110dd1a&X-Amz-SignedHeaders=host&actor_id=12763829&response-content-disposition=attachment%3B%20filename%3Dreforged-0.6-alpha-1.8.9.jar&response-content-type=application%2Foctet-stream
有没有办法检索一个更简单的下载URL(必须是直接链接!)?
我不希望每个文件3次上传:实现这个没有太多的复杂性/GitHub发布:直接链接
1
A
回答
0
Here is info如何通过任何HTTP客户端(curl,Java HTTP客户端等)下载单个文件。
另一种方法是使用一些云CI(例如travis-ci),从您的GitHub仓库获取源到云构建过程并在您需要的任何位置释放工件。
您还可以使用GitHub的REST API的get a single release asset
0
一种方法是离开下载部分到成熟的工具,使发布的URL的完整。例如,如果你做的是:curl -L -O https://github.com/TheOnlySilverClaw/Reforged/releases/download/v0.6-alpha/reforged-0.6-alpha-1.8.jar
,那么cUrl
为cUrl
将做权利东西,并下载所有重定向链接的最终JAR文件。
如果你自己做,你当然可以使用优秀的HTTP客户端库,如Apache HTTP client。但我建议你把它留给像cUrl这样的预处理工具。一旦它在本地下载,您可以随时在您的程序或安装程序中执行您需要的操作。
我强烈建议不要使用最终链接(您在问题中发布的AWS的长链接),因为它可能会在没有通知的情况下发生变化。发布JAR文件(https://github.com/TheOnlySilverClaw/Reforged/releases/download/v0.6-alpha/reforged-0.6-alpha-1.8.jar
)的链接是官方界面,不太可能更改。
0
感谢您的帮助! 我发现了一个示例代码和修改它(抱歉,我不能说的来源,因为我不觉得它了...):
public void sample() throws IOException {
String link =
"https://github.com/TheOnlySilverClaw/Reforged/releases/download/v0.6-alpha/reforged-0.6-alpha-1.8.jar";
String fileName = "reforged-0.6-alpha-1.8.jar";
URL url = new URL(link);
HttpURLConnection http = (HttpURLConnection)url.openConnection();
Map< String, List<String>> header = http.getHeaderFields();
while(isRedirected(header)) {
link = header.get("Location").get(0);
url = new URL(link);
http = (HttpURLConnection)url.openConnection();
header = http.getHeaderFields();
}
InputStream input = http.getInputStream();
byte[] buffer = new byte[4096];
int n = -1;
OutputStream output = new FileOutputStream(new File("C:/Users/Nico/Desktop/" + fileName));
while ((n = input.read(buffer)) != -1) {
output.write(buffer, 0, n);
}
output.close();
}
private static boolean isRedirected(Map<String, List<String>> header) {
for(String hv : header.get(null)) {
if( hv.contains(" 301 ")
|| hv.contains(" 302 ")) return true;
}
return false;
}
谢谢您的回答! ^^
相关问题
- 1. GitHub页面发布链接不工作
- 2. 发布facebook链接
- 3. 发布链接(MVC)
- 4. 是否可以直接从Github存储库发布到NPM?
- 5. 非直接链接
- 6. 链接到在GitHub
- 7. 直接将营销代码链接(链接发生器)
- 8. Github页面阻止与Google的直接链接?
- 9. 添加直接链接链接
- 10. TTTAttributedLabel:发布检测链接。
- 11. sharekit - 发布链接墙壁
- 12. 发布链接选择
- 13. Rails链接发布消息
- 14. 发布页面链接
- 15. UIActivityViewController发布超链接
- 16. 在Jenkins发布链接
- 17. 发布github上更改连接提交
- 18. 发布到/ PROFILE_ID /链接只接受链接和邮件参数
- 19. 直接从链接登录
- 20. 直接链接的帖子
- 21. JMapViewer.jar直接下载链接?
- 22. 直接链接到GSP
- 23. 直接链接facebook视频
- 24. 直接链接到活动
- 25. 直接链接到SonarQube Widget
- 26. Commission Junction直接链接
- 27. AJAX或直接链接
- 28. 链接Heroku提交给Github?
- 29. Github提交消息链接
- 30. GitHub上的符号链接