Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paperclip save remote images without extension

Here I have Controller

require 'open-uri'

user = User.new
url = "some_remote_image.jpg" #remote image WITH extension
user.image = open(url)
user.save

Model

has_attached_file :image,
  :styles => { :thumb => "25x25>", :large => "1000x1000>" }, 
  :path => ":rails_root/images/users/:id/:style/:hash.:extension",
  :url => "/images/users/:id/:style/:hash.:extension",
:hash_secret => "hash string"

This work, but images stores without extension, for ex. "some_remote_image." If uploading images by post form everything uploading WITH extension. I'm confused.

like image 751
wildDAlex Avatar asked Dec 31 '25 01:12

wildDAlex


2 Answers

I solved it by updating Paperclip to last github version and set image like this instead of user.image = open(url)

user.image = URI.parse(url)
like image 76
wildDAlex Avatar answered Jan 02 '26 15:01

wildDAlex


In case if someone wants reverse thing - add extension to no extension files

  def besfore_save
    tempfile = data.queued_for_write[:original]
    unless tempfile.nil?
      extension = File.extname(tempfile.original_filename)
      if !extension || extension == ''
        mime = tempfile.content_type
        ext = Rack::Mime::MIME_TYPES.invert[mime]
        self.data.instance_write :file_name, "#{tempfile.original_filename}#{ext}"
      end
    end

    true
  end
like image 40
Tim Kozak Avatar answered Jan 02 '26 13:01

Tim Kozak



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!