1

ファイルをダウンロードし、一時ファイルに書き込み、読み取り、readFileSync Buffer を関数に渡したいと思います。私はこれを試しました:

var file = fs.createWriteStream("temp.pdf")
var request = http.get(linkArray[1], function(response) {
    response.on('data', function(data){
         file.write(data)
    }).on('end', function(){
         postData(fs.readFileSync('temp.pdf'))
    })
});

機能する場合もあれば、機能しない場合もあります。私の推測では、ファイルを読み取るときに、ファイルが完全に書き込まれていない可能性があります。(しかし、'end' イベントは起動されるべきではありませんか?! ご覧のとおり、私はたくさんのファイルをダウンロードしてこれを実行したいと思います。これを解決する方法について何かアドバイスはありますか? これは最善ではないかもしれません。これを解決する方法...

4

2 に答える 2

5

on('data' パイプを使用する必要があるストリームをリンクしないでください。パイプは、ストリーム データ イベントを書き込みにリンクし、終了イベントを終了にリンクします。

var file = fs.createWriteStream("temp.pdf");
var request = http.get(linkArray[1], function(response) {
    response.pipe(file).on('close', function(){
         postData(fs.readFileSync('temp.pdf'));
    });
});

また、https://github.com/mikeal/requestを使用する必要があります

var request = require('request');

request.get(linkArray[i], function (err, response, body) {
  postData(body);
});

また

var request = require('request');
var file = fs.createWriteStream("temp.pdf");

request.get(linkArray[i]).pipe(file).on('close', function () {
    postData(fs.readFileSync('temp.pdf'));   
});
于 2013-04-01T17:36:01.347 に答える
0

ハンドラーfile.end();の上部で呼び出す必要があります。.on('end', ...)ただし、end()メソッド自体は非同期であるため、完了したらファイルを読み取る必要があります。例えば、

var file = fs.createWriteStream("temp.pdf")
var request = http.get(linkArray[1], function(response) {
    response.on('data', function(data){
        file.write(data)
    }).on('end', function(){
        file.end(function() {
            postData(fs.readFileSync('temp.pdf'))
        });
    })
});
于 2013-04-01T17:33:45.670 に答える