2017-12-16 33 views
0

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リクエストのボディにデータがあることを意味する(200キロバイト程度)右のサイズとディスク上のPDFファイルを保存します。しかし、pdfはUbuntuのドキュメントビューアで空白になります。

また、作業中のpdfファイル(これはうまく開きます)の出力と "cat abd.pdf | less"の出力を比較して、リクエストとトップとボトムの両方でダウンロードしたファイルは同じです。

以下は、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からもう一度保存して、うまくいきます。