我想爲我的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. 非直接鏈接
- 4. 直接將營銷代碼鏈接(鏈接發生器)
- 5. Github頁面阻止與Google的直接鏈接?
- 6. 發佈鏈接選擇
- 7. sharekit - 發佈鏈接牆壁
- 8. 發佈頁面鏈接
- 9. Rails鏈接發佈消息
- 10. JMapViewer.jar直接下載鏈接?
- 11. 直接鏈接的帖子
- 12. 直接從鏈接登錄
- 13. 直接鏈接到GSP
- 14. Commission Junction直接鏈接
- 15. 直接鏈接到SonarQube Widget
- 16. Github提交消息鏈接
- 17. 如何獲得直接鏈接以下載最新的VSTS發佈工件?
- 18. 如何從文件夾抓取圖像並使用javascript發佈直接鏈接
- 19. Swift - 直接在Facebook上發佈
- 20. Moneris直接發佈安全嗎?
- 21. 直接發佈到twitter和youtube
- 22. Facebook上的發佈鏈接不顯示鏈接縮略圖?
- 23. 鏈接Subversion發佈提交Trac
- 24. Facebook發佈到流並附加鏈接
- 25. 發佈鏈接爲提交按鈕
- 26. 與opengraph發佈的動作鏈接
- 27. 發佈到牆 - 特定鏈接
- 28. 應用鏈接之前發佈的iOS
- 29. 如何使用twitter API發佈鏈接?
- 30. Form發佈和排序鏈接