Node JS AWS S3 file upload. How to get public URL response
27,436
Use upload instead of putObject. It will return public url in Location key
Author by
Jack Wild
Updated on February 23, 2020Comments
-
Jack Wild about 4 years
I'm uploading a file to Amazon S3 using the Node SDK.
The file uploads are working fine, but I want to get the public url of the file to send back to the client.
At the moment the response I get is:
Successfully uploaded data { ETag: '"957cd1a335adf5b4000a5101ec1f52bf"' }
Here is my code. I'm using a Node Express server, and Multer to handle uploads.
app.use(multer({ // https://github.com/expressjs/multer dest: './public/uploads/', limits : { fileSize:100000 }, rename: function (fieldname, filename) { var time = new Date().getTime(); return filename.replace(/\W+/g, '-').toLowerCase() + time; }, onFileUploadData: function (file, data, req, res) { // file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer } var params = { Bucket: creds.awsBucket, Key: file.name, Body: data, ACL: 'public-read' }; var s3 = new aws.S3() s3.putObject(params, function (perr, pres) { if (perr) { console.log("Error uploading data: ", perr); } else { console.log("Successfully uploaded data", pres); } }); } })); app.post('/upload-image', function(req, res){ if(req.files.file === undefined){ res.send("error, no file chosen"); } });