我从api下载了一个ziparchive,其中包含gzip文件,我需要将gz文件保存到s3。不想解压缩或任何东西。转到S3。
当我打开存档时,它有一个带随机数的文件夹,/ 12345 / file1.gz和许多文件,/ 12345 / file2.gz等。
我已经尝试了yauzl和adm-zip,但不了解如何将每个条目记录在档案中并发送到s3。我有s3-stream-upload包,我可以用来发送。只是不能做对。谢谢你的帮助
yauzl.open("output.zip", {lazyEntries: true}, function(err, zipfile) {
if (err) console.error('zip err: ', err);
console.log(zipfile);
//upload.write(zipfile);
zipfile.readEntry();
zipfile.on("entry", function(entry) {
// file entry
zipfile.openReadStream(entry, function(err, readStream) {
if (err) console.error('readstream err: ', err);
readStream.on("end", function() {
zipfile.readEntry();
});
console.log(entry);
readStream.pipe(upload) //upload is an s3-upload-stream
.on('finish', function() { console.log('finished'); })
.on('error', function(err) { console.error('stream err: ',err); });
});
});
});
这给了我写完结束后的错误,我认为bcz的readstream是条目/文件的实际数据。在这一段时间可以使用一些帮助。谢谢
答案 0 :(得分:0)
答案是做一个直接的s3 put,readStream作为对象的主体......
yauzl.open("output.zip", {lazyEntries: true}, function(err, zipfile) {
if (err) console.error('zip err: ', err);
zipfile.readEntry();
zipfile.on("entry", function(entry) {
// file entry
zipfile.openReadStream(entry, function(err, readStream) {
if (err) console.error('readstream err: ', err);
readStream.on("end", function() {
zipfile.readEntry();
});
readStream.length = entry.uncompressedSize;
s3.putObject({
Bucket: "bark-data-team",
Key: "amplitude-data/raw/" + startDate + "/" + entry.fileName,
Body: readStream
}, function(err, data) {
console.log(err);
console.log(data);
});
});
});
});