I get 403 when I try to upload a file from browser using presigned url generated using aws sdk for JavaScript.

Posted November 22, 2020 2.4k views
Node.jsJavaScriptDigitalOcean Spaces

This is the code for generating presigned url:

 const params = {
    Bucket: "bucket-name", 
    Key: "atya.png", 
    Expires: 6000,
    ContentType: fileType,
    ACL: "public-read"

s3.getSignedUrl("putObject", params, function(err, url) {


The code to upload from vue app:

const res = await axios.put(signedURL, file, {
  headers: {
              "Content-type": "image/png",
              "x-amz-acl": "public-read",

I have enabled cors and given * as you can see in the image:

In the network tab I still see a 403 forbidden:

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Submit an Answer
1 answer

I have the same issue and I narrowed it down to the MD5 hash I was using for the upload.

When I tried the request in Postman with the Content-MD5 headers it returned a 403 with There were headers present in the request which were not signed error