title: AWS S3 generate_presigned_url vs generate_presigned_post for uploading files
body: <p>I was working on uploading and downloading a file to S3 bucket using pre-signed URLs.I came across these two methods <code>generate_presigned_url('put_object')</code> and <code>generate_presigned_post</code>.</p>
  <p><strong>What is the difference between these two methods?</strong></p>
  <pre><code># upload a file to a bucket with generate_presigned_url with put object
  s3_client.generate_presigned_url('put_object', Params= {'Bucket': &quot;BUCKET_NAME&quot;,
                                                          &quot;Key&quot;:&quot;OBJECT_KEY&quot;},
                                                           ExpiresIn=3600)
    
  
  # upload a file to a bucket using presigned post
  s3_client.generate_presigned_post(Bucket=&quot;BUCKET_NAME&quot;, Key=&quot;OBJECT_PATH&quot;,
                                    ExpiresIn=3600)
  </code></pre>
  <p>Could someone please explain the difference between both?</p>
  <p>If we have <code>generate_presigned_post</code> why was there a <code>generate_presigned_url</code> method with <code>put_object</code> for uploading in the first place.</p>
  <p>Note :  I know that <code>generate_presigned_post</code> is the recommended method for file uploads and I have used the same. However, there is no clear documentation on the difference between these methods.</p>