Загрузка файла строки в кодировке Base64 в PaperClip с использованием Rails

У меня есть закодированная в base64 строка файла изображения. Мне нужно сохранить его с помощью скрепки

Мой код контроллера

 @driver = User.find(6)
 encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read)
 decoded_file = Base64.decode64(encoded_file)

 @driver.profile_pic =  StringIO.open(decoded_file)
 @driver.save

В моей пользовательской модели

 has_attached_file :profile_pic, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => '/icon.jpg'

В настоящее время файл сохраняется как текстовый файл (stringio.txt). Но когда я меняю расширение на JPG, я могу просматривать его как изображение. Как я могу правильно назвать изображение, используя StringIO.

У меня рельсы 3.2, рубин 1.9.2, скрепка 3.0.3


person Amal Kumar S    schedule 10.05.2012    source источник


Ответы (2)


Я исправил проблему, используя

encoded_file = Base64.encode64(File.open('/pjt_path/public/test.jpg').read)
decoded_file = Base64.decode64(params[:encoded_image])
begin
  file = Tempfile.new(['test', '.jpg']) 
  file.binmode
  file.write decoded_file
  file.close
  @user.profile_pic =  file
  if @user.save
    render :json => {:message => "Successfully uploaded the profile picture."}
  else
    render :json => {:message => "Failed to upload image"}
  end
ensure
  file.unlink
end
person Amal Kumar S    schedule 14.05.2012
comment
не могли бы вы опубликовать больше своего кода? Я нашел это очень интересным! - person Em Sta; 26.06.2013
comment
@EmSta - я разместил здесь полный код. Этот код добавлен в мою функцию контроллера. Пожалуйста, дайте мне знать, какой еще код вам нужен - person Amal Kumar S; 27.06.2013
comment
Я открыл новый вопрос: stackoverflow .com/questions/17336788/ Может быть, вы можете мне помочь @AmalKumarS - person Em Sta; 27.06.2013
comment
@EmSta - показывает Этот вопрос был удален его автором добровольно. - person Amal Kumar S; 28.06.2013
comment
в этой версии, как я могу обрабатывать несколько расширений? - person Sebastian Corneliu Vîrlan; 07.10.2015
comment
Я не уверен, это то, что вам действительно нужно. Из указанного пути к файлу вы можете получить расширение, например: /pjt_path/public/test.jpg Используйте это расширение в разделе file = Tempfile.new(['test', '.jpg']) - person Amal Kumar S; 08.10.2015
comment
File.extname(example.pdf/pjt_path/public/test.pdf) вернет расширение файла - person Amal Kumar S; 08.10.2015

Попробуйте установить параметр :path/:url для has_attached_file и явно переопределить расширение:

http://rdoc.info/gems/paperclip/Paperclip/ClassMethods#has_attached_file-instance_method

соответственно

http://rdoc.info/gems/paperclip/Paperclip/Storage/Filesystem

person flooooo    schedule 10.05.2012