title: Node JS AWS S3 file upload. How to get public URL response
body: <p>I'm uploading a file to Amazon S3 using the Node SDK.</p>
  
  <p>The file uploads are working fine, but I want to get the public url of the file to send back to the client.</p>
  
  <p>At the moment the response I get is:</p>
  
  <pre><code>Successfully uploaded data { ETag: '"957cd1a335adf5b4000a5101ec1f52bf"' }
  </code></pre>
  
  <p>Here is my code. I'm using a Node Express server, and Multer to handle uploads.</p>
  
  <pre><code>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");
          }
      });
  </code></pre>