6

GitHub API を使用して、GitHub からファイルをダウンロードしています。認証に成功し、github からの応答を取得でき、ファイルの内容を表す base64 でエンコードされた文字列を確認できました。

残念ながら、base64 文字列をデコードするときに異常なエラー (文字列の長さが 4 の倍数ではない) が発生します。

HTTP リクエストを以下に示します。

GET /repos/:owner/:repo/contents/:path

(部分的な) 応答を以下に示します。

{
    "name":....,
    "download_url":...",
    "type":"file",
    "content":"ewogICAgInN3YWdnZXIiOiAiM...
}

私が遭遇している問題は、文字列の長さが 15263 バイトであり、文字列のデコード中にエラーが発生することです (文字列の長さが 4 の倍数ではありません)。node.js と 'base64-js' npm モジュールを使用して文字列をデコードしています。デコードを実行するコードを以下に示します。

var base64 = require('base64-js');
var contents = base64.toByteArray(fileContent);

デコードすると例外が発生します。

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)
    :
    :

GitHub API が正しいデータを送信していると思うので、それは問題ではないと思います。

デコードを不適切に実行していますか、それとも見落としている別の問題がありますか?

どんな助けでも大歓迎です。

4

3 に答える 3

14

私は少し実験し、次のように別の base64 デコード ライブラリを使用して解決策を見つけました。

var base64 = require('js-base64').Base64;
var contents = base64.decode(res.content);

エンコードされた文字列の長さが 4 で割り切れる必要があるかどうかはわかりませんが (明らかに、私の 15263 文字の長さの文字列は 4 で割り切れません)、代替ライブラリは文字列を適切にデコードしました。

私が見つけた 2 番目の解決策は、GitHub API の使用方法に固有のものです。GitHub API 呼び出しヘッダーに以下を追加することで、デコードされたファイルの内容も取得できました。

'accept': 'application/vnd.github.VERSION.raw'
于 2016-11-23T19:08:58.987 に答える