請爲我提供一種通過Paperclip從URL保存圖像的方法。通過回形針保存來自URL的圖像
回答
這裏有一個簡單的方法:
然後簡單:
user.picture_from_url "http://www.google.com/images/logos/ps_logo2.png"
首先下載帶有curb
寶石的圖像到TempFile
,然後簡單地分配tempfile對象並保存模型。
我沒有看到這個答案有什麼問題,投票結果,因爲我看到了投票。 – jpemberthy 2011-08-10 21:50:15
這是最高性能的答案([by far](http://toevolve.org/2011/04/03/http-request-performance.html))。我不是一個真正的表現極客,但如果你正在用大型文件工作,這真的會加起來。 – Chip 2013-09-23 23:50:59
這是一個鐵桿方法:
original_url = url.gsub(/\?.*$/, '')
filename = original_url.gsub(/^.*\//, '')
extension = File.extname(filename)
temp_images = Magick::Image.from_blob open(url).read
temp_images[0].write(url = "/tmp/#{Uuid.uuid}#{extension}")
self.file = File.open(url)
其中Uuid.uuid只是讓一些隨機ID。
這可能對您有所幫助。以下是在遠程URL中使用回形針和圖像的代碼。
require 'rubygems'
require 'open-uri'
require 'paperclip'
model.update_attribute(:photo,open(website_vehicle.image_url))
在模型
class Model < ActiveRecord::Base
has_attached_file :photo, :styles => { :small => "150x150>", :thumb => "75x75>" }
end
在回形針3.1.4它變得更加簡單。
def picture_from_url(url)
self.picture = URI.parse(url)
end
這比open(url)要好一些。因爲打開(url),你會得到「stringio.txt」作爲文件名。通過上面的內容,您將根據URL獲取文件的正確名稱。即
self.picture = URI.parse("http://something.com/blah/avatar.png")
self.picture_file_name # => "avatar.png"
self.picture_content_type # => "image/png"
如果你使用代理服務器,你如何才能實現這個功能? – Sebastian 2013-01-11 10:15:40
來自paperclip wiki:https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL我成功地在控制檯中運行它,該應用程序在heroku中。 – 2013-01-17 23:52:12
僅供參考,對於S3 urls,我仍然將'application/octet_stream'作爲'content_type'。 – 2015-01-06 15:46:54
由於這些都是老答案是這裏有一個較新的一個:
添加圖像遠程URL到您所需的控制器在數據庫
$ rails generate migration AddImageRemoteUrlToYour_Controller image_remote_url:string
$ rake db:migrate
編輯模型
attr_accessible :description, :image, :image_remote_url
.
.
.
def image_remote_url=(url_value)
self.image = URI.parse(url_value) unless url_value.blank?
super
end
*在Rails4中,您必須在控制器中添加attr_accessible。
更新表單,如果你允許其他從URL
<%= f.input :image_remote_url, label: "Enter a URL" %>
什麼是「超級」? – 2014-08-26 18:46:02
函數'super'用於調用原始方法,方法體的搜索從包含原始方法的對象的超類開始 – 2014-08-27 06:35:14
,直到我用解析URI「開放」這並沒有爲我工作的上傳圖片。 一旦我添加「打開」它的工作!
def picture_from_url(url)
self.picture = URI.parse(url).open
end
我的回形針的版本是4.2.1
打開它,就無法檢測到內容類型正確的,因爲它不是一個文件之前。它會說image_content_type:「binary/octet-stream」,即使我用正確的內容類型覆蓋它也不行。
- 1. 通過回形針上傳圖像而不保存對象
- 2. 保存來自url的圖像
- 3. 回形針 - 存儲圖像
- 4. 通過回形針通過Heroku上傳圖片到S3通過回形針
- 5. 通過回形針保存之前重命名圖像 - 導軌2.3.5
- 6. 回形針保存外的圖片:RAILS_ROOT
- 7. Rails回形針 - 跳過附件保存
- 8. Rails回形針將URL中的圖像保存到數據庫中
- 9. 在回形針中存儲一個基於URL的圖像
- 10. 使用回形針保存圖像無視圖
- 11. 回形針將不保存圖像中的Rails應用程序
- 12. 回形針,如何交換2個已經保存的圖像?
- 13. 回形針保存附件
- 14. 通過API使用回形針保存文件
- 15. 無法使用回形針在軌道上保存圖像
- 16. 回形針保存遠程圖像,而不擴展
- 17. 將圖像保存在回形針上時缺少擴展名
- 18. 回形針圖像保存爲JPG白色背景
- 19. 如何使用回形針正確保存base64圖像
- 20. 無法使用回形針保存多個圖像
- 21. 新的導軌/回形針 - 回形針不會保存
- 22. 保存來自URL的流
- 23. 回形針 - 圖像重複
- 24. 通過回形針映射圖像樣式
- 25. 回形針通過網址直接獲取圖像
- 26. Python保存來自url的captcha圖像?錯誤401
- 27. 如何保存來自Google的圖像
- 28. 保存來自WebBrowser控件的圖像
- 29. Python - 保存url的圖像
- 30. 回形針沒有通過控制檯僅通過表單向用戶保存頭像
由於某種原因,我需要使用update_attribute。 – 2011-07-04 22:57:02
簡單而有效。謝啦。 – goo 2012-05-25 03:03:35
例如,如果您需要使用'update_attributes'將'picture_from_url'重命名爲'picture_url =(value)'。 – 2013-06-02 13:07:56