如何使用Octokit.net以压缩文件的形式以编程方式下载私有存储库的最新版本?
我不想下载整个存储库,只是下载指定版本的源代码,例如最新的版本。
到目前为止,我已经创建了一个使用GitHubToken授权的GitHubClient,并且我已经获得了存储库中所有版本的列表。我可以获得最新版本的信息,比如名称、标签、Url和ZipballUrl等。
我曾尝试使用ZipballUrl下载该版本,但它没有返回有效的压缩文件。
在下面的代码中,我尝试从Octokit存储库下载最新版本。
String workspaceName = "octokit";
String repositoryName = "octokit.net";
String filename = "temp.zip";
var client = new GitHubClient(new ProductHeaderValue(repositoryName));
String GitHubToken = "--- token goes here ---";
var tokenAuth = new Credentials(GitHubToken);
client.Credentials = tokenAuth;
// Retrieve a List of Releases in the Repository, and get latest using [0]-subscript
var releases = await client.Repository.Release.GetAll(workspaceName, repositoryName);
var latest = releases[0];
// Get a HttpResponse from the Zipball URL, which is then converted to a byte array
var response = await client.Connection.Get<object>(new Uri(latest.ZipballUrl), new Dictionary<string, string>(), "application/json");
byte[] releaseBytes = Encoding.ASCII.GetBytes(response.HttpResponse.Body.ToString());
// Create the resulting file using the byte array
await File.WriteAllBytesAsync(filename, releaseBytes);我不是很熟悉GitHubClient,也不是Http-或者WebClients,所以我不知道错误是出在HttpResponse和我从那里得到的内容上,还是在文件写入过程中的任何其他地方。
发布于 2021-02-09 20:59:50
已解决:
我不能使用GitHubClient完全解决这个问题,所以我仍然有兴趣知道这是否可能。
然而,我设法解决了这个问题,在使用Octokit找到ZipballUrl之后,我添加了一个WebClient来负责下载。必须使用User-Agent和Authorization标头进行配置才能工作。
var latest = releases[0];
WebClient webClient = new WebClient();
webClient.Headers.Add("user-agent", "Anything");
webClient.Headers.Add("authorization", "token " + GitHubToken);
await webClient.DownloadFileTaskAsync(new Uri(latest.ZipballUrl), filename);https://stackoverflow.com/questions/66103488
复制相似问题