GitHub Releases API을 사용하여 NodeJS 스크립트를 통해 GitHub 릴리스에 파일 (.exe 설치 프로그램)을 업로드하려고합니다. 의사는 내 파일을 POST 요청 본문의 원시 바이너리 형식으로 보내야한다고 말합니다. 설치 프로그램이 30MB가 넘었으므로 스트리밍을해야한다고 생각했습니다.NodeJS의 HTTPS 요청에 대한 POST 파일 바이너리 데이터 스트림 (익스프레스 제외)
익스프레스 또는 요청과 같은 외부 NPM 종속성을 사용할 수 없으므로 기본 HTTPS 모듈 만 사용하려고합니다. 나는 그것이 작동하도록 고투하고있다.
는 여기에 내가 시도하고있는 작업은 다음과 같습니다
// (URL below has proper values in my code)
var fullUploadUrl = url.parse("https://uploads.github.com/repos/[org]/[repo]/releases/[release id]/assets?name=myFile.exe&access_token=[GitHub access token]");
var uploadRequest = https.request({
headers: { "Content-Type": "application/octet-stream" },
method: "POST",
protocol: "https:",
hostname: fullUploadUrl.hostname,
path: fullUploadUrl.path
}, (res) => {
if (res.statusCode !== 201) {
// Error
} else {
// Success
}
});
var readStream = fs.createReadStream(uploadAssetPath);
// readStream.on("end",() => { // I have also tried with this uncommented
// uploadRequest.end();
// });
readStream.pipe(uploadRequest);
이 즉시 400 상태 코드가 발생합니다.
HTTPS POST 요청에 바이너리 데이터를 스트리밍하는 적절한 방법은 무엇입니까? 누구든지 외부 NPM 종속성없이 NodeJS 환경에서 대규모 자산을 프로그래밍 방식으로 GitHub 릴리스에 업로드하는 방법에 대한 예가 있습니까?
편집 : 외부 request
모듈을 사용 했으므로 허용 된 답변에 원래 질문이 반영되지 않습니다.
우리는이 프로젝트에 대해 완전히 새로운 의존성을 가져 오지 않으려 고합니다. 우리 프로젝트는 이미 거대합니다. NodeJS 문서는 특별히 다음과 같이 말하고있다 : http.request()는 http.ClientRequest 클래스의 인스턴스를 리턴한다. ClientRequest 인스턴스는 쓰기 가능한 스트림입니다. POST 요청으로 파일을 업로드해야한다면 ClientRequest 객체에 쓰십시오 .' 그래서 내장 된 모듈로 이것을 수행하는 방법이 있어야합니다. – jenkins
사실, 약간의 좌절감 때문에 우리가 포기하고 결정했습니다. 'request' 모듈을 사용하십시오. 그것이 우리가 한 일이기 때문에 나는 당신의 대답을 받아 들일 것입니다. – jenkins