【问题标题】:GitHub Releases: Direct linkGitHub 发布:直接链接
【发布时间】:2016-02-29 22:37:24
【问题描述】:

【问题讨论】:

    标签: java


    【解决方案1】:
    1. Here is info 如何通过任何 HTTP 客户端(curl、java HTTP 客户端等)下载单个文件。

    2. 另一种方法是使用一些云 CI(例如 travis-ci),从您的 GitHub 存储库获取源代码到云构建过程中,并在您需要的任何地方发布工件。

    3. 您也可以将 GitHub REST API 用于get a single release asset

    【讨论】:

      【解决方案2】:

      实现这一点且不复杂的一种方法是将下载部分留给经过验证的工具,而保留发布 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)是官方接口,不太可能更改。

      【讨论】:

        【解决方案3】:

        感谢您的所有帮助! 我找到了一个示例代码并对其进行了修改(对不起,我不能说出处,因为我已经找不到了……):

        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;
             }
        

        感谢您的回答! ^^

        【讨论】:

          猜你喜欢
          • 2017-02-02
          • 2018-02-12
          • 2012-02-05
          • 2020-11-04
          • 1970-01-01
          • 1970-01-01
          • 2016-05-03
          • 2019-01-15
          相关资源
          最近更新 更多