2016-10-16 34 views
1

我想压缩文件并将二进制输出转储到AWS S3。我首先测试了我的代码,确保它甚至可以写入本地ZIP文件,该文件不起作用。如何将从zip到Node.js的二进制流写入S3

function zipFiles(filenames) { 
    return new Promise((resolve, reject) => { 
    const child = spawn(zipCmd, ['-'].concat(filenames)); 
    let buffer = ''; 

    child.stdout.on('data', (data) => { 
     buffer += data.toString(); 
    }); 

    child.stderr.on('data', (data) => { 
     // console.error(data.toString()); 
    }); 

    child.on('close', (code) => { 
     fs.writeFileSync('testing.zip', buffer); 
     resolve(code); 
    }); 
    }); 
} 

这会导致压缩的zip文件。我不确定如何处理来自spawn的缓冲流并将其组装成可与s3.putObjectfs.writeFileSync(作为测试方法)一起使用的东西。

回答

0

Got it!

function zipFiles(filenames) { 
    return new Promise((resolve, reject) => { 
    const out = fs.openSync('testing.zip', 'a'); 
    const child = spawn(zipCmd, ['-'].concat(filenames)); 
    let buffer = new Buffer(''); 

    child.stdout.on('data', (data) => { 
     buffer = Buffer.concat([buffer, data]); 
    }); 

    child.stderr.on('data', (data) => { 
     // console.error(data.toString()); 
    }); 

    child.on('close', (code) => { 
     fs.writeFileSync('testing.zip', buffer); 
     resolve(code); 
    }); 
    }); 
}