栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Lambda节点从S3上的文件在S3上创建一个zip文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Lambda节点从S3上的文件在S3上创建一个zip文件

好的,我今天必须这样做,并且可以正常工作。直接缓冲区到流,不涉及磁盘。因此,内存或磁盘限制在这里不会成为问题:

'use strict';const AWS = require("aws-sdk");AWS.config.update( { region: "eu-west-1" } );const s3 = new AWS.S3( { apiVersion: '2006-03-01'} );const   _archiver = require('archiver');//This returns us a stream.. consider it as a real pipe sending fluid to S3 bucket.. Don't forget itconst streamTo = (_bucket, _key) => {    var stream = require('stream');    var _pass = new stream.PassThrough();    s3.upload( { Bucket: _bucket, Key: _key, Body: _pass }, (_err, _data) => {  } );    return _pass;};exports.handler = async (_req, _ctx, _cb) => {    var _keys = ['list of your file keys in s3'];    var _list = await Promise.all(_keys.map(_key => new Promise((_resolve, _reject) => { s3.getObject({Bucket:'bucket-name', Key:_key})     .then(_data => _resolve( { data: _data.Body, name: `${_key.split('/').pop()}` } ));        }    ))).catch(_err => { throw new Error(_err) } );    await new Promise((_resolve, _reject) => {        var _myStream = streamTo('bucket-name', 'fileName.zip');        //Now we instantiate that pipe...        var _archive = _archiver('zip');        _archive.on('error', err => { throw new Error(err); } );        //Your promise gets resolved when the fluid stops running... so that's when you get to close and resolve        _myStream.on('close', _resolve);        _myStream.on('end', _resolve);        _myStream.on('error', _reject);        _archive.pipe(_myStream);//Pass that pipe to _archive so it can push the fluid straigh down to S3 bucket        _list.forEach(_itm => _archive.append(_itm.data, { name: _itm.name } ) );       //And then we start adding files to it        _archive.finalize();     //Tell is, that's all we want to add. Then when it finishes, the promise will resolve in one of those events up there    }).catch(_err => { throw new Error(_err) } );    _cb(null, { } );        //Handle response back to server};


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号