UNPKG

multer-s3-sharp-resizer

Version:

storage engine for multer to upload multiple images of different sizes to s3 object storage

93 lines 3.85 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const service_getDefaultFilenameBase_1 = __importDefault(require("../services/service.getDefaultFilenameBase")); const service_uploadFromStream_1 = __importDefault(require("../services/service.uploadFromStream")); const service_convertImage_1 = __importDefault(require("../services/service.convertImage")); const service_removeFileExtension_1 = __importDefault(require("../services/service.removeFileExtension")); class MulterS3SharpStorage { constructor(input) { this.uploadOriginalImage = true; this.metadata = () => { return {}; }; this.imageFormats = input.imageFormats || []; this.uploadOriginalImage = input.uploadOriginalImage !== undefined ? input.uploadOriginalImage : true; this.keyBase = input.keyBase || service_getDefaultFilenameBase_1.default; this.s3 = input.s3; this.bucket = input.bucket; this.metadata = input.metadata || this.metadata; } async _handleFile(req, file, cb) { const originalImage = file.stream; const pipes = []; const uploadResults = []; const baseKey = this.keyBase(req, file); if (this.uploadOriginalImage) { const originalImageUpload = await (0, service_uploadFromStream_1.default)(req, { s3: this.s3, bucket: this.bucket, file, key: `${baseKey}${path_1.default.extname(file.originalname)}` }, this.keyBase, this.metadata); uploadResults.push(originalImageUpload); pipes.push(originalImage.pipe(originalImageUpload.stream)); } for (const imageSettings of this.imageFormats) { const resizeImageUpload = await (0, service_uploadFromStream_1.default)(req, { key: `${imageSettings.folder + '/' || ''}${baseKey}.${imageSettings.fileFormat}`, file, s3: this.s3, bucket: this.bucket }, this.keyBase, this.metadata); uploadResults.push(resizeImageUpload); pipes.push(originalImage .pipe((0, service_convertImage_1.default)(imageSettings)) .pipe(resizeImageUpload.stream)); } const uploadedFiles = await Promise.all(uploadResults.map(ur => ur.upload)); cb(null, { uploadedFiles, key: baseKey }); } async removeKey(key) { const deleteFiles = []; const returnedResult = []; if (this.uploadOriginalImage) { const deletion = this.s3.deleteObject({ Bucket: this.bucket, Key: key }).promise(); deleteFiles.push(deletion); await deletion; returnedResult.push({ filename: key }); } for (const format of this.imageFormats) { const deletion = this.s3.deleteObject({ Bucket: this.bucket, Key: `${format.folder + '/' || ''}${(0, service_removeFileExtension_1.default)(key)}.${format.fileFormat}` }).promise(); deleteFiles.push(deletion); await deletion; returnedResult.push({ filename: key, folder: format.folder }); } try { await Promise.all(deleteFiles); return returnedResult; } catch (err) { throw err; } } _removeFile(req, file, cb) { } } exports.default = MulterS3SharpStorage; //# sourceMappingURL=class.MulterS3SharpStorage.js.map