2017-11-21 10 views
2

私はfsを使ってディスクにpdfファイルを書き出していますが、pdfファイルには内容がある7ページが含まれていますが、ファイルが書き込まれると内容はありません。ファイル全体が空白です。以下は、私がfs.writeFileSyncfs.writeSyncfs.writeFile間の重複が整理があります。このfs.writeFileSync空白ファイルの作成

request.get({ 
     url: spConfig.host + spConfig.sitecollection + '_api/web/GetFileByServerRelativeUrl(\'/sites/MSDS/Construction/ProductLabels/SD32382_-_ADVA Cast 596_(B2).pdf\')/$value', 
     headers: headers, 
     json: true 
    }).then(response => { 
     console.log('Inside Success') 
     // console.log(response) 
     // let writeStream = fs.createWriteStream(__dirname+'/wsdl/attachment.pdf') 
     console.log(response.length) 
     try { 
      fs.writeFileSync(__dirname+'/wsdl/attachment.pdf', response,'binary') 
      console.log('File has been written successfully') 
     } catch (err) { 
      console.log('Error in writing file') 
      console.log(err) 
     } 
    }).catch(err => { 
     spResponseCount = spResponseCount + 1 
     reject(err) 
    }) 
+1

writeFileSyncでコールバックを使用することはできません。コールバックは非同期の書き込み – cowCrazy

+1

応答です。どのタイプですか? (String、array) –

+0

応答はバイナリタイプです。これはpdfファイルのバイトストリームです。 – Jeet

答えて

2

のために使っていたコードです。

はこれで試してみてください:

try { 
    fs.writeFileSync(__dirname+'/wsdl/attachment.pdf', response); 
    console.log('Success in writing file') 
} catch (err) { 
    console.log('Error in writing file') 
    console.log(err) 
} 

結果は何を期待されていない場合、あなたはresponse変数の内容にチェックを与え、それが適切に満ちていることを確認する必要があります。

参考文献:

https://nodejs.org/docs/latest-v8.x/api/fs.html#fs_fs_writefile_file_data_options_callback https://nodejs.org/docs/latest-v8.x/api/fs.html#fs_fs_writefilesync_file_data_options


私はあなたのコードを再作成しようとしましたが、私は、あなたがデータを抽出するために使用しているものをライブラリわかりません。この例は、私と一緒に正常に動作します:

let request = require('request-promise'); 
let fs = require('fs'); 

request.get({ 
    url: 'http://che.org.il/wp-content/uploads/2016/12/pdf-sample.pdf', 
    encoding: null 
}) 
.then(response => { 

    try { 
     fs.writeFileSync(__dirname+'/attachment.pdf', response); 
     console.log('Success in writing file') 
    } catch (err) { 
     console.log('Error in writing file') 
     console.log(err) 
    } 
}); 

編集:私はnullにエンコーディングを設定するのを忘れたので

私のコードが正しく動作していませんでした。要求のドキュメントには、次の説明があります。

encoding - 応答データのsetEncodingで使用するエンコーディングです。 nullの場合、本文はバッファーとして戻されます。他のもの( のデフォルト値が未定義のものを含む)は、エンコーディングパラメータ としてtoString()に渡されます(これはデフォルトで有効にutf8です)。 (注:バイナリデータを期待 場合は、エンコーディングを設定する必要があります。null)を

https://www.npmjs.com/package/request#request-options-callback

からwriteFileSyncのエンコーディングが安全に削除できます。

+0

迅速な対応をありがとうございます。ファイルが書き込まれ、コントロールがtryブロック内に落ちると、ファイルがまだ空白ですが、ログを「ファイル書き込みで成功」として取得しています。 – Jeet

+0

'write.FileSync'の前に' console.log(response、response.length);を追加してください。私は、もしあなたが不完全なPromise(あるいはそのようなもの)を持っていると思っているので、あなたがあなたの質問に '応答'をどのように記入するかを追加すればよいと思う。 – Stefano

+0

参考のために実際の質問の完全なコードを更新しました。一見して、response.lengthはコンソールに '96979'を表示します。 – Jeet

関連する問題