2017-06-15 4 views
0

古いファイル転送ユーティリティを使用して注文処理のための古い電子メールベースのシステムを置き換えるために、Nodejs、Expressおよびこれに関連する他のライブラリを使用しています。fsモジュールwriteFileStream実際にディスク上にファイルを作成していない

現在の問題は、データをプルオーバーしても問題ありませんが、最後にディスクにファイルを保存することはできません。

これは私が使用しているコードです。単なるスニペットです。すべての変数が設定され、正しい型であると仮定します。

私が理解していることによると、fileStream.end()関数はストリームを閉じてファイルをディスクに保存することになっていますが、そうしません。私はそれが何処にあるのか、そして何もないフォルダを見る。

はまた、より多くの情報のために、ここに私のconfigオブジェクトは、次のとおりです。

module.exports = { location: 'CA', watch:{ folder: './watch/', transUrl: 'http://localhost:3289', transmission: 'send' }, poll:{ folder: './recieve', transUrl: 'http://localhost:3289', transmission: 'receive' } }

答えて

1

これを行うための正しい方法はpipeである:

http.get(file_url, (res) => { 
    const filePath = path.join(download_path, filename) 
    const writeStream = fs.createWriteStream(filePath) 
    res.pipe(writeStream) 
    .on('error', (e) => console.error(e)) 
    .on('close',() => console.log(`file was saved to ${filePath}`)) 
}) 
0

は、最終的には回避策が見つかりました:データとしてで来るよう

最終的なコードは、ストリームへの追加の概念を無視しますデータは現在の実装では純粋にテキストです。次のように

最終的なコードは次のとおりです。

var file_url = `${config.poll.transUrl}/?location=${config.location}&transmission=${config.poll.transmission}`; 
console.log(file_url); 
var download_path = config.poll.folder; 
var fileContent = ''; 
var filename = setFileName(); 
var fileStream = fs.createWriteStream(download_path + filename); 
fileStream.on('finish',()=>{ 
    console.log(`${filename} has been downloaded to: ${download_path}`); 
}); 
http.get(file_url, (res)=>{ 
    res.on('data', (data)=>{ 
    fileContent += data.toString(); 
    }) 
    .on('end',()=>{ 
    fs.writeFile(path.join(download_path, filename), fileContent,(err) =>{ 
     if(err){ 
     return console.error(err); 
     } 
     console.log('file was saved') 
    }) 
    }); 
}); 
関連する問題