title: S3 URL encoding when generating Signed URL
body: <p>I have a system where after a file is uploaded to S3, a Lambda job raises a queue message and I use it to maintain a list of keys in a MySQL table.</p>
  
  <p>I am trying to generate a pre-signed URL based on the records in my table.</p>
  
  <p>i have two records currently</p>
  
  <pre><code>/41jQnjTkg/thumbnail.jpg
  /41jQnjTkg/Artist+-+Song.mp3
  </code></pre>
  
  <p>Generating pre-signed URL using :</p>
  
  <pre><code>var params = {
          Bucket: bucket,
          Expires: Settings.UrlGetTimeout,
          Key: record
      };
  S3.getSignedUrl('getObject', params);
  </code></pre>
  
  <p>The URL with <code>thumbnail.jpg</code> works perfectly fine, but the one with <code>+-+</code> fails. The original file name on local disk was "Artist - Song.mp3". S3 replaced spaces with '+'. Now when I am generating a URL using the exact same filename that S3 uses, it doesn't work; I get a "Specified Key doesn't exist" error from S3. </p>
  
  <p>What must I do to generate URLs consistently for all filenames?</p>