I just switched a project from Dragonfly to Carrierwave, specifically to see if I could take advantage of Carrierwave Direct, which uploads large files directly to S3 or another cloud storage.
I was able to make a form containing a single file field that would upload to S3. What I could not work out was how to upload the file to S3 AND other form elements to the model that had Carrierwave mounted on it. I ended up punting and just doing the two-step upload to the server and server stores the file in S3 using regular Carrierwave (not Direct).
Can anyone point me to an example of Carrierwave Direct that incorporates other form fields saved into the same ActiveRecord as the Carrierwave details?
Docs say you should use Fog gem
And it doesn’t matter what storage you chose, local filesystem, S3 or any other cloud storage.
Your form is submitted and the location of uploaded file, along with other attributes of the model you are editing
are stored in the database. So, you question
What I could not work out was how to upload the file to S3 AND other form elements to the model that had Carrierwave mounted on it.
I was able to make a form containing a single file field which would upload using Carrierwave _Direct_ to upload to S3 without my server acting as a middle-man. I was not able to suss out how to combine such a file field with other fields intended for my server's eyes.
I was perfectly able to create a single combined form which contained the file AND its metadata, upload both to my server, and yes, using Fog, store the file on S3. That's with ordinary Carrierwave, which is lovingly documented and a drop-in replacement for nearly every other file storage scheme on Rails.
The issue, which I still do not understand how to solve without an Ajax sidecar submitting two forms at once, is how to send part of the data directly to S3 and the remainder to my server, and maintain a connection between the two.
If you can help, I would appreciate it.
I know this is almost 2 years old now, but I’m trying to figure out how to do the same thing with Carrierwave Direct. Did you ever solve this? If you did, would you mind posting how? Code snippets are also appreciated.
No, I never did work this out, had to move on and the solution in place (in production) is sub-standard as a result.
Oddly enough, this link just appeared in the Heroku newsletter e-mail: https://devcenter.heroku.com/articles/direct-to-s3-image-uploads-in-rails?utm_source=pardot&utm_medium=newsletter&utm_campaign=july While it uses Paperclip, the technical theory might be applicable to your (our) situation. More study needed...
Hm, yeah, that could work, though it doesn’t seem to use Paperclip or Carrierwave, just straight jQuery File Upload. More complex than I had planned, but I’ll give it shot.
Thanks for the resource.
Thanks again for the link, Walter. With some tweaking, got it working all in the same form. I’m not processing the uploads at all but it seems like you could still use carrierwave or paperclip to process in the background after uploading.