2016-11-23 36 views
2

我正在使用GitHub API從GitHub下載文件。我已經能夠成功進行身份驗證以及從github獲得響應,並且看到代表文件內容的base64編碼的字符串。使用GitHub API解碼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是給我正確的數據,所以我估計是不問題。

我是不是正在進行解碼還是出現了另一個我忽略的問題?

任何幫助表示讚賞。

回答

3

我嘗試了一下,通過使用不同的base64解碼庫如下找到了解決辦法:

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

我不知道這是否是強制性的4(顯然我的15263有一個編碼字符串,長度整除字符長度字符串不能被4整除),但備用庫正確地解碼了字符串。

我也發現第二個解決方案是針對如何使用GitHub API。通過添加以下到GitHub的API調用標題,我也能得到解碼文件內容:

'accept': 'application/vnd.github.VERSION.raw' 
+0

增加頭部是更好的選擇。 –

0

出於某種原因,Github的API的base64編碼的內容不會在所有在線的base64解碼器正確解碼我已經嘗試從谷歌的頭版。

Python的作品不過:

import base64 
base64.b64decode("ewogICAgInN3YWdnZXIiOiAiM...")