Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Paperclip automatically clean up filenames?

I'm using Thoughtbot's Paperclip gem to handle file uploads.

I'm finding that when I upload a file with spaces in the filename, it gets stored with the spaces replaced with underscores.

That's good.

I also tried uploading a file with special characters like ~ and so on and they all got replaced with underscores.

Great. Exactly what I want.

But why is it happening?

All I'm doing in my model is...

has_attached_file(
    file_somefile,
    :path => ":rails_root/public/system/other/path/elements/:basename.:extension"
)

Is this Paperclip's default behavior?

like image 620
Ethan Avatar asked Sep 07 '11 02:09

Ethan


2 Answers

To add a little more information, this happens in Paperclip::Attachment#cleanup_filename in which the default restricted_characters /[&$+,/:;=?@<>[]{}\|\\^~%# ]/ are replaced with underscores.

It's not documented, but you can specify the :restricted_characters option to paperclip to change what gets replaced, e.g.

class User < ActiveRecord::Base
  attr_accessible :avatar
  has_attached_file :avatar, :restricted_characters => /@/ # only replaces '@'
end
like image 96
Jared Avatar answered Oct 02 '22 17:10

Jared


OK, after a little more searching, I found this blog post that says, down at the bottom, that Paperclip actually does some minimal processing of filenames.

like image 38
Ethan Avatar answered Oct 02 '22 18:10

Ethan