-
-
Save tonydspaniard/6b67274c083bd1f13f5b45a92314a145 to your computer and use it in GitHub Desktop.
Image Upload to S3 From Node.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const http = require("http"); | |
const https = require("https"); | |
const AWS = require('aws-sdk'); | |
const formidable = require("formidable"); | |
const uuid = require("uuid"); | |
let server = http.createServer(launch); | |
let s3 = new AWS.S3({ | |
// s3 credentials | |
}); | |
function uploadToS3(file, destFileName, callback) { | |
let uploadParams = {Bucket: config.bucket.name, Key: destFileName, Body: ''}; | |
let fileStream = fs.createReadStream(file.path); | |
fileStream.on('error', function(err) { | |
console.log('File Error', err); | |
}); | |
uploadParams.Body = fileStream; | |
deleteFile(file.path); | |
s3.upload(uploadParams, callback); | |
} | |
function deleteFile(filePath) { | |
fs.unlink(filePath, function (err) { | |
if (err) { | |
console.error(err); | |
} | |
console.log('Temp File Delete'); | |
}); | |
} | |
function launch (request, response) { | |
var form = new formidable.IncomingForm(); | |
form.parse(request, function (error, fields, files) { | |
let fileId = uuid.v4(); | |
let filename = `user-photos/${fileId}.jpg`; | |
let file = files.selfie; | |
if (!/^image\/(jpe?g|png)$/i.test(file.type)) { | |
deleteFile(file.path); | |
response.write('{"status": 403, "message": "Expects Image File. Please try again."}'); | |
return response.end(); | |
} | |
uploadToS3(file, filename, function (error, data) { | |
if (error) { | |
console.log(error); | |
response.write('{"status": 442, "message": "Yikes! Error uploading your photo. Please try again."}'); | |
return response.end(); | |
} | |
else if (data) { | |
response.write(JSON.stringify({status: 200, uri: data.Location})); | |
return response.end(); | |
} | |
else { | |
response.write('{"status": 442, "message": "Yikes! Error saving your photo. Please try again."}'); | |
return response.end(); | |
} | |
}) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment