2016-09-14 16 views
3

バイナリデータからpdfファイルを保存する際に問題があります。私はWebサービスからバイナリを取得し、エクスプレスサーバ(ミドルウェアとして)はクライアントにファイルを送信する必要があります。 問題は、クライアントとAdobe Acrobat Readerで空白のPDFが表示されるため、バイナリデータを保存/エンコードするときにエラーが発生したと考えています。ノードエクスプレスバイナリ文字列からPDFを保存

%PDF-1.5 
%���� 
2 0 obj 
<</Length1 17948/Length 9587/Filter/FlateDecode>>stream 
x��{y`՝���!ɖ-Y�iɖF�e˖,۲lَ��v�$���s8v��B�$�(4nHiI�RP��@�n�����׶���-P�-Wbi����H��������y��|���^��}3�p9� -[3�~�+���< ��l�E���E7�7��Њ�+�l\�1��?P��rt� 
�G��!}ؿj���ɿ~�@�+H߰ 
o�t�&��u��5m�??ن�5�~���e�����й��޼�3����#��~���ԷX��%���������� 
k\��\z���d���O�[email protected]�A9(-�A>�@`�B0� �`+ؠ���Q��\ �<��R�A��*��*A5�@-��"P 
�Fh�f�-� 

[:

exports.downloadReceipt = function(req, res) { 
    var idPrenotazione = req.params.idPrenotazione; 
    var options = { 
    'method': 'GET', 
    'uri': api_url + '/ricevute/'+idPrenotazione, 
    'headers': { 
     'Authorization': req.get('Authorization') 
    } 
    } 

    request(options, function(error, response, body) { 
    var date = new Date().getTime(); 
    var filename = 'ricevuta_'+idPrenotazione+'_'+date+'.pdf'; 
    var file = folderPath + filename; 

    fs.writeFile(file, body, function(err) { 
    if(err) 
     console.log(err); 
    else 
     console.log("The file was saved!"); 
    });  

    // for the moment I only save the file on server file system 
    res.end(); 


    }); 
} 

はまた、私は、Webサービスから取得した文字列は、このようなものであるとし、オプション

var options = { encoding: 'binary' }; 
    var wstream = fs.createWriteStream(file_); 
    wstream.write(body); 
    wstream.end(); 

をコードせず、代わりにWRITEFILEのcreateWriteStreamを使用しようとしました......]

0000042111 00000 n 
0000042252 00000 n 
0000042393 00000 n 
trailer 
<</Root 7 0 R/ID [<10edca6daaad5a49919bad108ba77f0a><492e2d9a8ca810421f41667217724e69>]/Info 4 0 R/Size 183>> 
%iText-5.5.8 
startxref 
173008 
%%EOF 

私は間違っているの?私はちょうどbase64でイメージを取得する関数を持っています(そして、同じWebサービスから)writeFileを使ってサーバファイルシステムに保存すると、うまくいきます。

ありがとうございました

答えて

5

問題が見つかりました。私は要求オプションとwriteFileに'encoding': 'binary'を指定する必要がありました:fs.writeFile(file, body, 'binary', function(err) {

これで、バイナリ文字列から画像とpdfを正しく開いて送信できます。

+0

これは私にトンを助けました!共有していただきありがとうございます – Linx

関連する問題