A question to the creators of ActiveStorage.
I just implemented the upload feature to my own editor (nothing special, something similar to Github Text Editor). After the user dropped the file to the textarea the uploading process starts and puts a returned link back to the editor:
The questions is — why the hell the links are so long?! What’s the point?
First, there is a limited amount of chars in the editor. Second, it just looks ugly. And if I add ten pictures in a row it’s getting even much uglier.
Why is it not something like this:
``
?
Maybe I missed something and there is a way to get back a shorter version?
I'm not an author of this gem, but at a guess, I would say that the lengthy URLs are there to ensure that there is no chance of two people uploading a same-name file and getting a collision. Those look a lot like UUIDs, which are often used for this purpose. Remember, when you drag something into the editor, the parent record has not been saved, and so you could not do anything clever like add the parent record ID to the URL so it could be used for disambiguation.
Walter
Thanks for reply Walter.
I’m not sure I need all this stuff and even I understand the purpose of it.
For unique UUID a simple hash is more than enough (Youtube stores billions of unique videos using just 11 chars). And I’m even not saying about the url-shortener services.
SecureRandom lets us to create unique tokens almost for everything, using 24 characters (for example).
In my case users should be able to upload files into the editor, with no relations with the editable Article, just it. It’s a simple feature we all need very often. Why other libraries don’t generate so long links for this?
Also, I just found out, the long link is always a redirect to the App to get a temporary link to a storage service, so it won’t be cached by browsers, ever. Jeez…
Looks like ActiveStorage is a unique tool for certain things in Basecamp, not a Carrierwave substitute. Am I right?
We're trying it out here, not sure if it will replace Shrine or not. It's optional, so you don't have to use it. But note that Paperclip was deprecated the moment that ActiveStorage was announced. "Bundled" is better than "add-on" for many people. https://shrinerb.com is really wonderful, and so well supported that I genuinely worry about the developer burning out.
One other thing that they may be doing with the lengthy URLs is "security through obscurity", so that the URLs are genuinely un-guessable. Not to say that a YouTube hash is any more guessable.
Walter
Also, I just found out, the long link is always a redirect to the App to get a temporary link to a storage service, so it won’t be cached by browsers, ever. Jeez…
Looks like ActiveStorage is a unique tool for certain things in Basecamp, not a Carrierwave substitute. Am I right
At the moment, the link always redirects through the app. This enables a bunch of things on the final download link (like time-limited signed links)
I completely agree that it is an annoying over-abstraction for many standard cases.
the good news is that there seems to be decent progress on improving this (though unclear when it will actually get into rails)
https://github.com/rails/rails/pull/34477#pullrequestreview-270890716