본문 바로가기
개발/Git, GitHub

깃허브 - RESTful API로 1MB 이상 큰 파일 읽기 (Read 1MB GitHub Files with GET)

by 피로물든딸기 2023. 7. 20.
반응형

깃허브 데스크탑으로 프로젝트 관리하기 강의 오픈!! (인프런 바로가기)

 

Git / GitHub 전체 링크

Node JS 전체 링크

 

참고

- RESTful API로 파일 읽기

 

위 링크를 참고하여 아래 코드를 실행해보자.

auto-test repo에서 test/password.txt 파일을 읽는 코드다.

let myKey = "...";

const { Octokit } = require("@octokit/rest");

const octokit = new Octokit({
  auth: myKey,
});

async function test() {
  const result = await octokit.request(
    "GET /repos/bloodstrawberry/auto-test/contents/test/password.txt",
    {
      owner: "bloodstrawberry",
    }
  );

  let data = decodeURIComponent(escape(atob(result.data.content)));
  console.log(data);
}

test();

 

그런데 해당 파일이 1MB가 넘어가면 GET으로 파일을 읽을 수가 없다.

 

GET으로 얻을 파일을 1MB 이상으로 만들면

아래와 같이 View raw 링크가 만들어지고, 파일은 미리보기 할 수 없는 상태가 된다.

https://github.com/bloodstrawberry/auto-test/blob/main/test/password.txt

 

그리고 View raw 링크를 누르면 파일 내용을 확인할 수 있다.

 

다시 result 로그를 추가해보자.

console.log(result);

 

실제 datacontent에도 어떠한 값도 들어가 있지 않는다.


해결 방법

 

다음과 같이 download_url 정보를 얻은 후, 다시 request하면 된다.

let myKey = "...";

const { Octokit } = require("@octokit/rest");

const octokit = new Octokit({
  auth: myKey,
});

async function test() {
  const resultForUrl = await octokit.request(
    "GET /repos/bloodstrawberry/auto-test/contents/test/password.txt",
    {
      owner: "bloodstrawberry",
      repo: "auto-test",
      path: "test/password.txt",
    }
  );

  const downloadUrl = resultForUrl.data.download_url;

  console.log(downloadUrl);

  const result = await octokit.request({
    method: "GET",
    url: downloadUrl,
    // headers: {
    //   'Accept': 'application/octet-stream',
    // },
    // responseType: 'stream',
  });

  console.log(result.data);
}

test();

 

또는 headers의 Accept를 application/vnd.github.v3.raw로 설정하자.

  const result = await octokit.request(
    "GET /repos/bloodstrawberry/auto-test/contents/test/password.txt",
    {
      owner: "bloodstrawberry",
      repo: "auto-test",
      path: "test/password.txt",
      headers: {
        Accept: 'application/vnd.github.v3.raw', 
        //Accept: 'application/json; charset=utf-8'
      },
    }
  );

  console.log(result);

 

반응형

댓글