使用节点将 zip 存档文件上传到 S3
Upload zip archive files to S3 with node
我从 api 下载一个 ziarchive,其中包含 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 读取流是 entries/files 的实际数据。在这一段时间需要一些帮助。谢谢
答案是用 readStream 作为对象的主体进行直接 s3 put...
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);
});
});
});
});
我从 api 下载一个 ziarchive,其中包含 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 读取流是 entries/files 的实际数据。在这一段时间需要一些帮助。谢谢
答案是用 readStream 作为对象的主体进行直接 s3 put...
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);
});
});
});
});