carrierwave-base64 icon indicating copy to clipboard operation
carrierwave-base64 copied to clipboard

Compatible with content_type_whitelist?

Open ehannes opened this issue 9 years ago • 16 comments

Using this gem, can I use carrierwave's content_type_whitelist somehow?

ehannes avatar Oct 28 '16 13:10 ehannes

actually this should work already, if you defined content_type_whitelist in your uploader

y9v avatar Nov 01 '16 15:11 y9v

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.

ehannes avatar Nov 02 '16 06:11 ehannes

I'm having the same issue. Using this in my Uploader.

def content_type_whitelist
    /image\//
end

Is there any status on this?

jflewis avatar Dec 14 '16 17:12 jflewis

Planning to work on this in this weekend.

y9v avatar Dec 15 '16 09:12 y9v

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 avatar Jun 06 '17 15:06 bobishh

@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

y9v avatar Jun 06 '17 19:06 y9v

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 avatar Jun 06 '17 20:06 bobishh

@bobishh okey, thank you, I'm closing this issue then

y9v avatar Jun 07 '17 03:06 y9v

Great! If I have the time to check I will let you know if I can solve this issue by upgrading the gems.

ehannes avatar Jul 12 '17 19:07 ehannes

@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.

ehannes avatar Aug 24 '17 18:08 ehannes

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.

ehannes avatar Aug 24 '17 18:08 ehannes

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 avatar Aug 24 '17 19:08 ehannes

@ehannes the parameters look fine. I will take a look at the issue, if I will find time on this weekend

y9v avatar Aug 25 '17 09:08 y9v

@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 avatar Mar 22 '18 08:03 goelinsights

@goelinsights No, actually I have not fixed this yet...

ehannes avatar Apr 09 '18 11:04 ehannes

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 }

JamesAndresCM avatar Oct 12 '18 10:10 JamesAndresCM