carrierwave-base64
carrierwave-base64 copied to clipboard
Compatible with content_type_whitelist?
Using this gem, can I use carrierwave's content_type_whitelist somehow?
actually this should work already, if you defined content_type_whitelist in your uploader
I tried it, but I didn't get it to work. I declared it as following in my uploader:
def content_type_whitelist
%w(pdf/application)
end
and then uploading a pdf file, but it was rejected due to incorrect content type. Then I thought it had something to do with the base64 conversion.
I'm having the same issue. Using this in my Uploader.
def content_type_whitelist
/image\//
end
Is there any status on this?
Planning to work on this in this weekend.
Issue won't reproduce with current version of gem (2.5.3 at the moment) and carrierwave v1.1.0, tested with rails 5.1 and 4.2.8
@bobishh Dis you set the content_type_whitelist to an array of extensions? I think it did not work for @ehannes and @jflewis because they tried to use MIME types for the whitelist
I've tried both ways - regex and array (except not with pdf but with image/png and image/jpeg), and it worked in all cases ¯_(ツ)_/¯
@bobishh okey, thank you, I'm closing this issue then
Great! If I have the time to check I will let you know if I can solve this issue by upgrading the gems.
@bobishh @lebedev-yury I still fail to get this to work. I guess I'm doing some stupid mistake... I had a look at the readme for the ContentTypeWhitelist module in CarrierWave and if I understand it correctly, I would be able to write something like this:
def content_type_whitelist
%w(application/pdf image/jpg image/jpeg image/png)
end
If I add the above code and then try to attach a pdf file to the attachment, it fail with the following error: en.errors.messages.content_type_whitelist_error. If I remove the content_type_whitelist method from my uploader, I can once again attach pdf files.
I have solved the mystery. I tried in the console and it worked. Then I thought maybe something is wrong with my tests, and I were correct. Before I added the file with Rack::Test::UploadedFile.new(file_path). If I tried a simple File.open(file_path) it worked. Rack::Test::UploadedFile is for attaching files to a request (http://www.rubydoc.info/gems/rack-test/0.5.5/Rack/Test/UploadedFile) and I was attaching a file to a model. Sorry for the trouble! I hope this can help others with the same problem.
Sorry to bother you again but now when I tried a real upload, it still doesn't work, (though my tests are now working). I guess that means that the error is in the frontend. I'll have to continue my research... I'll be back if I get it to work. If someone wants to look at it, this is my parameters sent to the controller:
Parameters: {"profile"=>{..., "attachment"=>"data:application/pdf;base64,JVBERi0xLjQKJc...
This is the error I get:
en.errors.messages.content_type_whitelist_error
This is my content_type_whitelist:
def content_type_whitelist
%w(application/pdf image/jpeg image/png)
end
@ehannes the parameters look fine. I will take a look at the issue, if I will find time on this weekend
@ehannes did you figure out what was going on or how to figure out the file name the whitelist is checking against?
Have a similar issue where I'm getting the error:
You are not allowed to upload "" files, allowed types: image/jpg, image/jpeg, image/png",
so it's stripping out the mime type somewhere and leaving it blank - would love some troubleshooting help if you figured out how to access the file name for a base64 uploaded file.
My JSON file being submitted:
{id: 2057, image: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD…du8xO+QR825cZHToMAVmNPNM52KFBHTPHHuaPNmiTWh//2Q==", image_filename: "ABCD_1.jpg"}
Wondering if this is impacted by changing my photo.rb file to use image_filename to populate the filename
Photo.rb
mount_base64_uploader :image, ImageUploader, file_name: -> (u) { u.image_filename }
@goelinsights No, actually I have not fixed this yet...
alternative to validate content_type :
Add in gemfile :
gem 'cocaine', '~> 0.5.8'
gem 'file_validators'
Add in model :
validates :img, file_size: { in: 100.bytes..1.megabyte }, file_content_type: { allow: ['image/jpeg', 'image/png', 'image/jpg'], mode: :strict }