Eri*_*oda 2 base64 github-api node-github
我正在使用GitHub API从GitHub下载文件.我已经能够成功进行身份验证以及从github获取响应,并查看表示文件内容的base64编码字符串.
不幸的是,当解码base64字符串时,我得到一个不寻常的错误(字符串长度不是4的倍数).
HTTP请求如下所示:
GET /repos/:owner/:repo/contents/:path
Run Code Online (Sandbox Code Playgroud)
(部分)响应如下所示:
{
"name":....,
"download_url":...",
"type":"file",
"content":"ewogICAgInN3YWdnZXIiOiAiM...
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是字符串的长度是15263字节,我在解码字符串时遇到错误(字符串长度不是4的倍数).我正在使用node.js和'base64-js'npm模块来解码字符串.执行解码的代码如下所示:
var base64 = require('base64-js');
var contents = base64.toByteArray(fileContent);
Run Code Online (Sandbox Code Playgroud)
解码会导致异常:
Error: Invalid string. Length must be a multiple of 4
at placeHoldersCount (.../node_modules/base64-js/index.js:23:11)
at Object.toByteArray (...node_modules/base64-js/index.js:42:18)
:
:
Run Code Online (Sandbox Code Playgroud)
我认为GitHub API正在向我发送正确的数据,所以我认为这不是问题.
我是不正确地执行解码还是我忽略了另一个问题?
任何帮助表示赞赏.
Eri*_*oda 10
我尝试了一下,通过使用不同的base64解码库找到了一个解决方案,如下所示:
var base64 = require('js-base64').Base64;
var contents = base64.decode(res.content);
Run Code Online (Sandbox Code Playgroud)
我不确定是否必须将编码的字符串长度整除4(显然我的15263字符长度字符串不能被4整除),但备用库正确解码了字符串.
我发现工作的第二个解决方案特定于如何使用GitHub API.通过将以下内容添加到GitHub API调用标头,我还能够获取解码的文件内容:
'accept': 'application/vnd.github.VERSION.raw'
Run Code Online (Sandbox Code Playgroud)
经过大量实验,我想我确定了工作和损坏的 base64 解码之间的区别。
似乎 GitHub Base-64 编码为:
与“基本”(RFC4648)Base64 编码器相反。几种语言似乎默认使用基本编码器(包括我使用的 Java)。当我切换到 MIME 编码器时,我得到了未乱码的文件的全部内容。这将解释为什么在某些情况下切换库可以解决问题。
我会注意到包含换行符的内容字段 - 解码器应该忽略它们,但并非所有人都这样做,因此如果您仍然遇到错误,您可能需要尝试删除它们。
媒体类型标头会更好地完成工作,但是在我的情况下,我尝试通过 GitHub 应用程序使用 API - 在撰写本文时,GitHub 要求在执行此操作时使用特定的媒体类型,并返回 JSON 响应.
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |