Question

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 1.5k 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) {

    res.send(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",
            }
  });
 console.log(res);

I have enabled cors and given * as you can see in the image: https://imgur.com/a/GoHCeYo

In the network tab I still see a 403 forbidden:

https://imgur.com/7BYklm9
https://i.imgur.com/7BYklm9.png

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