import S3ExpressZip, {getS3ObjectsList, getS3ObjectStream, getHTTPHeaders} from 's3-express-zip';
import {PassThrough} from 'stream';
import https from "https";
import {S3} from 'aws-sdk';
const configS3 = {
endpoint: 'BUCKET_ENDPOINT',
region: 'BUCKET_REGION',
accessKeyId: 'ACCESS_KEY_ID',
secretAccessKey: 'SECRET_ACCESS_KEY'
};
const s3 = new S3({
endpoint: 'BUCKET_ENDPOINT',
accessKeyId: 'ACCESS_KEY_ID',
secretAccessKey: 'SECRET_ACCESS_KEY',
});
s3.config.update(configS3);
const Bucket = 'BUCKET_NAME';
const Prefix = 'BUCKET_PREFIX';
function cb(error: any, data: any) {
console.log(
'-----------------',
`|ZIP CB ${error ? 'ERROR' : 'SUCCES'}|`,
error || `${data}o archived`,
`|END CB ${error ? 'ERROR' : 'SUCCES'}|`,
'-----------------',
)
}
async function downloadFromS3KeepingPrefix(req, res) {
const archiveName = `archive-${(new Date()).getTime()}.zip`;
const objects = await getS3ObjectsList(s3, Bucket, Prefix);
const headers: {[key: string]: string} = getHTTPHeaders(objectsList, archiveName);
(Object.keys(headers))
.forEach((headerKey: string) => res.setHeader(headerKey, headers[headerKey]));
S3ExpressZip({res})(objects.map((f:any) => getS3ObjectStream(s3, f)), cb)
}
async function downloadFromS3RemovingPrefix(req, res) {
const archiveName = `archive-${(new Date()).getTime()}.zip`;
const objects = (await getS3ObjectsList(s3, Bucket, Prefix))
.map((obj: any) => ({
...obj,
Name: obj.Key.split(`${Prefix}/`).join('')
}));
const headers: {[key: string]: string} = getHTTPHeaders(objectsList, archiveName);
(Object.keys(headers))
.forEach((headerKey: string) => res.setHeader(headerKey, headers[headerKey]));
S3ExpressZip({res})(objects.map((f:any) => getS3ObjectStream(s3, f)), cb)
}