diff --git a/index.js b/index.js index 6df33fa..1b28351 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,16 @@ const AWS = require("aws-sdk"); const stream = require("stream"); const yauzl = require("yauzl"); +const mime = require('mime-types'); + const { v4: uuidv4 } = require("uuid"); -const uploadStream = ({ Bucket, Key }) => { +const uploadStream = ({ Bucket, Key, ContentType }) => { const s3 = new AWS.S3(); const pass = new stream.PassThrough(); return { writeStream: pass, - promise: s3.upload({ Bucket, Key, Body: pass }).promise(), + promise: s3.upload({ Bucket, Key, Body: pass, ContentType}).promise(), }; }; @@ -27,15 +29,16 @@ const extractZip = (Bucket, buffer) => { zipfile.openReadStream(entry, function (err, readStream) { if (err) reject(err); const fileNames = entry.fileName.split("."); + + //adding the mime type for the created file. const { writeStream, promise } = uploadStream({ Bucket, - Key: `${fileNames[0]}.${uuidv4()}.${ - fileNames[fileNames.length - 1] - }`, + Key: entry.fileName, + ContentType: mime.lookup(entry.fileName) }); + readStream.pipe(writeStream); promise.then(() => { - console.log(entry.fileName + " Uploaded successfully!"); zipfile.readEntry(); }); }); @@ -61,6 +64,19 @@ exports.handler = async (event) => { const object = await s3.getObject(params).promise(); const result = await extractZip(Bucket, object.Body); + console.log("Zip file successfully extracted."); + + //deleting the original zip file. + await s3.headObject(params).promise() + console.log("File Found in S3") + try { + await s3.deleteObject(params).promise() + console.log("file deleted Successfully") + } + catch (err) { + console.log("ERROR in file Deleting : " + JSON.stringify(err)) + } + return { status: result && 200, response: result && "OK", @@ -71,4 +87,4 @@ exports.handler = async (event) => { console.log(message); throw new Error(message); } -}; +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a56f8ca..dacf676 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "aws-sdk": "^2.1015.0", + "mime-types": "^2.1.35", "uuid": "^8.3.2", "yauzl": "^2.10.0" } @@ -114,6 +115,25 @@ "node": ">= 0.6.0" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -254,6 +274,19 @@ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", diff --git a/package.json b/package.json index f286745..d2769a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "dependencies": { "aws-sdk": "^2.1015.0", + "mime-types": "^2.1.35", "uuid": "^8.3.2", "yauzl": "^2.10.0" },