2016-09-07 7 views
0

Iは、p(ファイルパス)を取得し、ドライブにオリジナルを保存する前にファイルを圧縮する方法は?このコードで

function createCSV(){ 
    return mytmp.getTempDir((tmpPath) => { 
    return new Promise(function (resolve, reject) { 

     let p = path.resolve(tmpPath, "snake_case_users33.csv"); 
     var ws = fs.createWriteStream(p); 

     csv 
     .write([ 
      {a: "a1", b: "b1"}, 
      {a: "a2", b: "b2"} 
     ], {headers: true}) 
     .pipe(ws); 

     resolve(p); 

    }); 
    }); 
} 

をダウンロードすることができます。しかし、それを圧縮した後、私は、日付をフォーマットする前に、または.csvファイルをフォーマットする最初のいずれかで、.CSVファイルを圧縮する必要がありますドライブに保存してパスを取得します。我々は何とかこのcsvファイルを圧縮するzipPathを使用することができた後、多分

let p = path.resolve(tmpPath, "snake_case_users.csv"); 
 
     var output = fs.createWriteStream(p); 
 
     csv.write([ 
 
      {a: "a1", b: "b1"}, 
 
      {a: "a2", b: "b2"} 
 
      ], {headers: true}); 
 

 
//below let zipPath = path.resolve(tmpPath, "snake_case_users.zip"); and zip

:私は、CSVファイルを作成する必要が先頭に

+0

あなたのコードの後の文章は、分かりにくいです。あなたはそれを言い直すことができますか? – leigero

+0

@leigero、フォーマットされたcsvファイルを解凍して1つをダウンロードするパスを取得したい – AxOn

答えて

0

私はアーカイバモジュールを使用することをお勧めします。

https://github.com/archiverjs/node-archiver

それは非常に使いやすいですし、それがジッパーにも、すべてのフォルダをラップすることができます。ここで

はもちろんフォルダ

function archive (cb) { 

    var archive = require('archiver'); 
    var timestamp = new Date().getTime().toString(); 
    // this self.logPath + '/archive' + timestamp + '.zip' is the path to zip file. 
    //You can use any path you like. 
    var zipPath = self.logPath + '/archive' + timestamp + '.zip' 
    var output = fs.createWriteStream(zipPath); 
    var archive = archiver('zip'); 

    output.on('close', function() { 
    console.log(archive.pointer() + ' total bytes'); 
    console.log('archiver has been finalized and the output file descriptor has closed.'); 

    return cb("All ok or path to zip"); 
    }); 

    archive.on('error', function(err) { 
    return cb("Error"); 
    }); 

    archive.pipe(output); 
    //read directory 
    var allLogs = fs.readdirSync('path to dir or to file'); 
    //append files to archive 
    async.eachSeries(allLogs, function(fileName, callback){ 
     var file = path.join(self.logPath, fileName); 
     archive.append(fs.createReadStream(file), { name: fileName }); 
     callback(); 
    }, function(){ 
     //finalize it will trigger on close event 
     archive.finalize(); 
    }); 
} 

からzipファイルを作成するサンプルコードを使用すると、いくつかのパスを変更する必要がありますが、他のすべては問題ないはずです。

希望するこれは役に立ちます

+0

どうすればzipファイルパスを取得して、このファイルをzip圧縮されたcsvでダウンロードできますか? – AxOn

+0

私は答えを編集 –

+0

var zipPath変数を確認 –

関連する問題