2016-11-23 4 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... 
} 

의 I가 발생하고 문제 문자열의 길이는 15,263 바이트이다를, 문자열을 디코딩 할 때 오류가 발생합니다 (문자열 길이는 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 호출 헤더에 다음을 추가함으로써, 또한 디코딩 된 파일 내용을 얻을 수 있었다 다음 Github에서의 API를 base64로 인코딩 된 콘텐츠는 모든 온라인 Base64로 디코더에 제대로 디코딩하지 않는 몇 가지 이유를 들어

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

추가 헤더가 더 나은 옵션입니다. –

0

를 I Google의 첫 페이지에서 시도했습니다.

파이썬은 그러나 작동합니다

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