您现在的位置:首页 >> 环保家居

如何通过 GitHub API 获取较大的明文

时间:2023-03-01 12:18:04

let fileSHA, fileBlob, fileContent, file

fileSHA用来擦除我们只想要受益的份文件的 SHA fileBlob擦除从API 受益的 blob。 fileContent用于擦除复制后的字符。 file打包括我们真正必需的数据资料。

您可以在下一节里面寻找也就是说的摘要code,只需将份文件系统梯度改动为实际份文件梯度(带份文件扩展名)。

受益大份文件

但是,如果您必需受益多于 1MB 的份文件,API 亦会带上有误。这是因为上述方法不赞成大份文件。若必需受益大份文件,我们需要改以应用于 Github API。

这类API而无须您从 Git 擦除库和列表里面擦除和加载许多现代 Git 普通人,也可以不够新 Git 引用(Git references)。 该类API主要适用于blob,这正是本文的着重。

Git将大份文件转成为 编码器的 blob,而不是擦除整个份文件,以便获不够好的可靠性。因此,当您允诺同一个份文件时,希望您应用于调回 blob的应用流程。

要受益blob,您必需传播份文件也就是说的SHA。您可能只想问,什么是 SHA?又该如何获它?

每次送交新份文件时,git 都亦会建立一个名为 hash 或 SHA 的唯一ID 来记录此次改动。但有时可能亦会导致疑问,我将在本文结尾处探讨这个疑问。

受益份文件也就是说的SHA

现在,我们必需寻找一种原理来受益所需份文件的“SHA”。GitHub API有一个应用流程,可以用来同我们必需应用于的份文件内容可完成交互。

激活

GET /repos/{owner}/{repo}/contents/{path}

作为号召,我们给予一个有关普通人的链表,其里面打包括附录里面每个份文件的链接资料。 链接资料里面打包括我们可以擦除和结尾处亦会加到的SHA。

激活

const getFileSHA = async () => {

try {

const response = await fetch(

"<>"

);

const data = await response.json();

console.log(data);

fileSHA = data[3].sha

console.log(fileSHA);

} catch (error) {

console.log(error);

}

getFileBlob(fileSHA)

}

data[3].sha 是具有 votes_by_region.jso n 的 SHA,因此我们将其擦除在 fileSHA 里面以待结尾处应用于。 上图是操译者的输出情况:

受益也就是说的Blob

我们仍然受益了blob所需SHA。 我们必需应用于有所不同的应用流程来处理事件 blob。 这个应用流程与上一个应用流程相像,但该应用流程必需将份文件也就是说的SHA 作为第三个给定传播。

激活

GET /repos/{owner}/{repo}/git/blobs/{file_sha}

当我们向示意图的链表发放份文件的 SHA 作为给定时,就可以受益也就是说blob。

激活

const getFileBlob = async (fileSHA)=> {

try {

const response = await fetch(

MLT-${fileSHA}MLT-

);

const data = await response.json();

fileBlob = data.content

convertBlob(fileBlob)

} catch (error) {

console.log(error);

}

}

此允诺调回一个 编码器的 blob。 是一种以 ASCII 字符播放器声称二进制数据资料的编码器方案。 当我们必需在不完成任何变不够的但亦会擦除或点对点时,它很依赖于。操译者输出看来很暴,但这就是 编码器数据资料的方法。

将 Blob 转成为可应用于的数据资料

在之前一步,我们必需将以 编码器的 blob 转成为我们可以在流程里面应用于的数据资料。 但这一步并不引人内疚,因为规范原理在某些但亦会似乎都因。在这个疑问上花了几个小时后,我寻找了三个解决疑问方案。

1.最单纯的原理

这是 JavaScript 原生赞成的规范方法。 atob() 是一个 Web API 应用流程,可将 编码器数据资料复制为纯字符。

atob 把擦除的 ASCII 转化为二进制,因为它将以 ASCII 编码器的 数据资料转成为二进制基本上。 输出将是一个复制后的字符。 要将其转成为其许多现代数据资料类型,我们应用于 JSON.parse()。

激活

fileContents = atob(blob)

file = JSON.parse(fileContents

2.第二种原理

如果上述原理带上有误,你可以应用于Node.js 发放了一个原理 Buffer.from()。 它将要复制的字符作为第一个给定,将编码器技术作为第二个给定。

激活

try {

const fileContents = Buffer.from(fileBlob, "").toString()

file = JSON.parse(blobToString)

console.log(file)

} catch(error) {

console.log(error)

}

3.第三种原理

如果您在前端工作,则前面提到的原理很有可能都因。 在这种但亦会,建立一个应用于 decodeURIComponent 的链表。

激活

// define the function

const decode = str => {

utf8Bytes = decodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {

return String.fromCharCode('0x' + p1);

});

return atob(utf8Bytes);

}

您可以通过传播 fileBlob 作为给定来调用此链表,并受益您必需的复制字符。

激活

fileContents = decode(fileBlob)

file = JSON.parse(fileContents)

console.log(file)

依然不能经常性工作

此时,您可以试着两种再次自由选择。您可以应用于 FileReader API 或以有所不同的方法应用于 decodeURIComponent。

1.FileReader API:您可以在此处寻找 MDN 文档()

2.decodeURIComponent:请参阅 Rajeev Singh关于处理事件 16 位编码器字符的网易。()

或者,您也可以试着一个名为 js-()的 NPM 打包。我自己不亦会应用于过,所以只能发放主动性的异议。

肯定

如前所述,SHA 是在每次变不够份文件时都亦会改动的具有唯一性的ID号。此外,由于我们在 getFileSHA() 链表里面有一个硬质编码器的普通人摘要资料,如果您在附录里面附加或删除份文件,API 可能亦会以有所不同份文件的 SHA 号召。

为解读决疑问这个疑问,您可以明确指明的份字符串而不是摘要资料,这样您就可以在送交新改动后维持链表连续性。

说明了和 TL;DR

1.Git 以 blob 播放器擦除较大的份文件,因此我们应用于 GitHub 附录 API 来受益多于 1MB 的份文件。

2.我们必需发放电子邮件地址、repo 称呼和份文件的 SHA 来受益 blob。

3.为了受益 SHA,我们必需向应用流程发放份文件系统梯度并将其擦除在给定里面。

4.便我们必需将 SHA 作为给定传播给另一个应用流程并获一个 编码器的 blob。

5.需要将 blob 复制为纯字符,然后应用于 JSON.parse() 将其转成为许多现代播放器,然后才能应用于它。

不够多摘要资料

GitHub 擦除库的内容可(#contents)

Git 附录()

Git 附录 API 入门()

英译本介绍

赵青窕,51CTO社区编辑,从事多年马达联合开发。研究课题兴趣打包括安全和OS和网络安全和领域,发表过网络相关申请专利。

原文结尾:How to Fetch Large Data Files Through GitHub API,译者:Kaushal Joshi

宝宝积食怎么调理脾胃
轻微腋臭
眼睛结膜炎是什么原因引起的吗
经常肚子疼拉肚子怎么回事
江中初元公司
相关阅读