2017-12-16 5 views
0

pdf 파일을 가져 와서 디스크에 저장하려고합니다. 이것은 (200킬로바이트에 대한) 적절한 크기의 디스크에있는 PDF 파일을 저장NodeJS 요청에서 pdf 파일을 가져 와서 디스크에 저장하지만 빈 흰색 페이지로 열림

request.post({ 
     url: some_api_url, 
     json: true, 
     body: { 
      by: user, 
      password: 'mypassword' 
     } 
    }, function(err, response, body) { 
     if (err) next(err); 
     else { 
      if (typeof(body) == 'string') { 
       //console.log(body); 
       fs.writeFileSync(path.join(__dirname, 'abc.pdf'), body, 'binary', function(err) { console.log(err);}); 
      } else { 
       console.log("invalid file"); 
      } 
     } 
    }); 

POST 요청의 본문에 데이터가 있음을 의미합니다 : 다음은 내 코드입니다. 그러나 pdf는 우분투의 문서 뷰어에서 공백으로 열립니다.

나는 pdf 파일의 pdf | less 출력을 비교해 보았습니다. pdf 파일은 (잘 열립니다) 요청과 다운로드 된 파일의 상단과 하단은 동일합니다.

아래는 PDF 파일을 제공하는 API 코드입니다. 우편 배달부에서 요청을하면 pdf 파일이 다운로드되어 디스크에 저장되고 정상적으로 열립니다.

        let fileStat = fs.statSync(filePath); 

            res.writeHead(200, { 
             'Content-Disposition': 'attachment; filename="report.pdf"', 
             'Content-Type': 'application/pdf', 
             'Content-Length': fileStat.size 
            }); 

            let readStream = fs.createReadStream(filePath); 
            res.on('finish', function() { 
             console.log("file sent"); 
            }); 
            readStream.pipe(res); 

답변

0

누군가가 필요로하는 경우를 대비하여 내 솔루션을 작성하십시오.

파일을 읽고 전송하는 동안 인코딩에 문제가있었습니다. 이제 파일을 base64로 읽고, 전송 한 다음 base64에서 다시 저장하고 이제는 정상적으로 작동합니다.

관련 문제