2015-10-20 61 views
1

我想用存檔器創建存檔並在其中放入一些文件。客戶端,用戶將點擊一個按鈕,它會生成存檔(服務器端)。在發送給客戶端之前創建一個存檔並添加文件

我正在使用Express.js,這是我的服務器端代碼,將生成存檔。我做了這樣的事情:

app.get('/export/siteoccupancy', function(req,res){  

    if(_.isEmpty(req.query)){ 
     res.status(404).send('requires a start and end date'); 
    }else{ 
     //getting paramas 
     var sDate = req.query.startDate; 
     var eDate = req.query.endDate; 

    } 

    var fs = require('fs'); 
    var archiver = require('archiver'); 

    var archive = archiver('zip'); 

    archive.on('err',function(err){ 
     res.status(500).send({error : err.message}); 
    }); 

    res.on('close',function(){ 
     console.log('Archive size : %d b',archive.pointer()); 
     return res.status(200).send('OK').end(); 
    }); 

    res.attachment('data-export.zip'); 

    archive.pipe(res); 

    var stream = fs.createWriteStream("data-report.txt')"); 
    stream.once('open',function(fd) { 
     stream.write('test1'); 
     stream.write('\n test2'); 
     stream.write('\n test3'); 
     stream.end(); 
    }); 

    archive.append(stream); 

    archive.finalize(); 

}); 

這對我來說是全新的,我想了解爲什麼控制檯告訴我流文件是空的?

錯誤:追加:輸入的名稱必須在Archiver.append

是一個非空字符串值

問候

+0

看到這個[post](http://codewinds.com/blog/2013-08-19-nodejs-writable-streams.html)我不認爲你需要'一次('打開',fn)' –

回答

1

你只能追加readStream,因爲存檔只能從readstreams取數據。您可以使用名爲archive.append的方法,並且應該使用name屬性作爲第二個參數傳遞以命名該文件。像這樣:

archive.append(myReadStream,{ name : 'myTest.txt'}); 
相關問題