Visitar URL original
ActiveStorage: Using upload_preset with folder creates invalid image links · Issue #423 · cloudinary/cloudinary_gem · GitHub
Skip to content

ActiveStorage: Using upload_preset with folder creates invalid image links #423

Open

Description

@gr8bit

Describe the bug in a sentence or two.

I use different upload presets in my app which default to a different folder each (e.g. "production").
storage.yml:

cloudinary:
  service: Cloudinary
  upload_preset: <%= ENV['CLOUDINARY_UPLOAD_PRESET'] %>

What the SDK cannot know is that the upload preset is configured to upload files into a specified folder. Therefore, when it generates links to the uploaded images, they miss the folder part and result in dead links.

Issue Type

[ ] Build - Can’t install or import the SDK
[ ] Performance - Performance issues
[X] Behaviour - Functions aren’t working as expected (Such as generate URL)
[ ] Documentation - Inconsistency between the docs and behaviour
[ ] Other (Specify)

Steps to reproduce

  1. Configure an upload preset using an upload folder (e.g. "test") in the Cloudinary administration interface.
  2. Configure Rails' storage.yml to use upload_preset: test with the configured cloudinary service (see above).
  3. Upload a file attachment via Rails and ActiveStorage, then use url_for() to generate a link to that image.
  4. Observe: the link misses the "test"-folder part.

Operating System

[ ] Linux
[ ] Windows
[ ] OSX
[X] All

Environment and Libraries

Cloudinary Ruby SDK version - 1.13.2
Ruby Version - 2.6.6
Rails Version - 5.2.4.1
ActiveStorage - 5.2.4.1

Suggestion

We could use the Cloudinary API to fetch the configured upload folder for the specified upload preset. I'm not sure that's a good idea - we might end up calling the API every time someone uses an upload_prefix.
We may also introduce another storage.yml option "preset_folder" to be used together with upload_preset only.

I need this fixed quite urgently so I'm absolutely willing to submit a PR. Any hints from the maintainers would be totally helpful!

Activity

  1. const-cloudinary commented on Aug 31, 2020

    @const-cloudinary
    Member

    @gr8bit , storage.yml already supports folder option (it can be used without upload preset). It is used for both upload and url generation. In case you use upload presets, the folder option is ignored during upload, but still can be used for url generation. If you set it to exact same folder that is configured in the preset, it will work. If you don't have the folder name in your app, you can use admin API to fetch it and set programmatically (preferably once, on initialisation).

  2. gr8bit commented on Aug 31, 2020

    @gr8bit
    Author

    @const-cloudinary 😮 Seriously? I must have missed that the whole time! Will try right now.

  3. gr8bit commented on Aug 31, 2020

    @gr8bit
    Author

    It works. Thanks a lot!
    I had to turn off enhance_image_tag though, else all sprockets-generated URLs would break (e.g. image_url('/test/test.png') would become /images/development/http://localhost:3000/test..., but that's another story. Saved me a lot of work. <3 Where in the documentation did I miss this feature?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions