Question

SignatureDoesNotMatch PUT-ing to SignedUrl using ActiveStorage

Posted May 25, 2021 117 views
Ruby on Rails

Hello,

I am currently trying to implement an image upload feature within the application I’m working on and trying to take advantage of Rails ActiveStorage and DigitalOcean Spaces.

I am generating a presigned-url from ActiveStorage and from that URL I am trying to test an upload with it using Postman.

My config/storage.yml file looks like so:

digital_ocean:
  service: S3
  endpoint: https://nyc3.digitaloceanspaces.com
  access_key_id: XXXX
  secret_access_key: XXXX
  region: nyc3
  bucket: XXXX
  public: true

I have updated the config/environments/development.rb file to use this service

config.active_storage.service = :digital_ocean

Since I am trying to get this to work on development first I have used s3cmd to configure CORS for my Space.

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>http://localhost:3000</AllowedOrigin>

    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>

    <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>

Using Postman, I POST to an endpoint within my application to generate a presigned-url which gets returned.

The idea is that the front-end portion of my application would PUT to this URL.

I then try to PUT to it, setting the binary to a file I wish to upload, each time I submit, I get the following 403 Forbidden back:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>SignatureDoesNotMatch</Code>
    <RequestId>tx000000000000032e92095-0060ad32dc-c814494-nyc3c</RequestId>
    <HostId>c814494-nyc3c-nyc3-zg03</HostId>
</Error> 

Any and all help would be greatly appreciated

Thanks in advance

Submit an answer

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!