2015-10-20 3 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

Смотрите эту [пост] (http://codewinds.com/blog/2013-08-19-nodejs-writable-streams.html) я не думаю, что вам нужно 'раз (» open ', fn) ' –

ответ

1

вы можете только добавить в ReadStream, так как архив может принимать только данные из readstreams. Вы можете использовать метод с именем archive.append, и вы должны передать в качестве второго аргумента свойство name для имени файла. Как так:

archive.append(myReadStream,{ name : 'myTest.txt'}); 
Смежные вопросы