2012-07-17 8 views
13

के साथ यूआरएल से अपलोड करें मैं एस 3 स्टोरेज पर पेपरक्लिप द्वारा यूआरएल से चित्र अपलोड करना चाहता हूं। मैं के साथ काम: तो बुनियादी तौर पर मैं एक URL से मेरी फाइल डाउनलोड करने के लिए बनायापेपरक्लिप: एक्सटेंशन

class Asset 

    has_attached_file :asset, 
    :styles => {:thumb => "60x60>"}, 
    :storage => :s3, 
    :s3_credentials => "#{Rails.root}/config/s3.yml", 
    :path => "/pictures/:id/:style.:extension" 

    validates_attachment_content_type :asset, :content_type => ['image/gif', 'image/jpeg', 'image/png', 'image/x-ms-bmp'] 

end 

:

Ruby 1.9.3 
Rails 3.2.6 
paperclip 3.1.3 
aws-sdk 1.3.9 

मेरे पास है मेरे चित्र मॉडल

picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg")) 
picture.save 

लेकिन यह मेरी फाइल को सेव करें एक खराब file_name के साथ और यह फ़ाइल का विस्तार सेट नहीं करता है:

#<Asset id: 5, asset_file_name: "open-uri20120717-6028-1k3f7xz", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:41:40", updated_at: "2012-07-17 12:41:40"> 
p.asset.url 
    => http://s3.amazonaws.com/my_assets_path/pictures/5/original. 

जैसा कि आप देख सकते हैं कि कोई एक्सटेंशन नहीं है।

मुझे इसे हल करने का एक तरीका मिला लेकिन मुझे यकीन है कि मेरे पास बेहतर तरीका हो सकता है। यह समाधान अपने कंप्यूटर पर फ़ाइल की प्रतिलिपि करने के लिए है तो मैं इस तरह S3 पर भेज दें:

filename = "#{Rails.root}/tmp/my_picture.jpg" 
open(filename, 'wb') do |file| 
    file << open("http://www.my_url.com/my_picture.jpg").read 
end 

picture = Asset::Picture.new(asset: open(filename)) 
picture.save 

यह मेरे कंप्यूटर पर काम करता है:

#<Asset::Picture id: 10, asset_file_name: "my_picture.jpg", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:45:30", updated_at: "2012-07-17 12:45:30"> 
p.asset.url 
    => "http://s3.amazonaws.com/assets.tests/my_assets_path/10/original.jpg" 

हालांकि मैं पता करता है, तो इस विधि का काम करेंगे नहीं है हेरोकू पर (मैं इस पर अपना ऐप होस्ट करता हूं)।

अस्थायी फ़ाइल के बिना पास कोई बेहतर तरीका नहीं है?

उत्तर

22

अच्छा समय। मैंने अभी एक पुल अनुरोध भेजा है जिसे कुछ घंटों पहले (20 जुलाई 2012) में पैच किया गया था, जिससे आपके जीवन को वास्तविक बनाना आसान हो।

self.asset = URI.parse("http://s3.amazonaws.com/blah/blah/blah.jpg") 

यह आपके jpeg छवि डाउनलोड हो जाएगा और यह सुनिश्चित करें कि फ़ाइल नाम blah.jpg है और सामग्री प्रकार 'छवि/जेपीजी' है

पेपरक्लिप संस्करण> 3.1.3 (आप इसे लिंक करना होगा जीथब रेपो तक इसे रिलीज़ होने तक)।

अपडेट: पेपरक्लिप संस्करण के साथ काम करने की पुष्टि> = 3.1.4

+2

आप एक आकर्षण की तरह काम करते हैं! और अब इसे पेपरक्लिप 3.1.4 में शामिल किया गया है जो मैं चाहता था। वास्तव में अच्छी नौकरी! धन्यवाद! –

+2

पुष्टि की, पेपरक्लिप 3.1.4 के साथ बढ़िया काम करता है। तुमने मेरा दिन बना दिया। धन्यवाद! –

संबंधित मुद्दे