클립으로 URL에서 이미지 저장
Paperclip으로 URL에서 이미지를 저장하는 방법을 제안하십시오.
간단한 방법은 다음과 같습니다.
require "open-uri"
class User < ActiveRecord::Base
has_attached_file :picture
def picture_from_url(url)
self.picture = open(url)
end
end
그런 다음 간단히
user.picture_from_url "http://www.google.com/images/logos/ps_logo2.png"
Paperclip 3.1.4에서는 훨씬 간단 해졌습니다.
def picture_from_url(url)
self.picture = URI.parse(url)
end
이것은 open (url)보다 약간 낫습니다. open (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"
구문 분석 된 URI에 "open"을 사용할 때까지는 작동하지 않았습니다. 일단 "열기"를 추가하면 효과가있었습니다!
def picture_from_url(url)
self.picture = URI.parse(url).open
end
내 클립 버전은 4.2.1입니다
열기 전에는 파일이 아니기 때문에 컨텐츠 유형을 올바르게 감지하지 못했습니다. image_content_type : "binary / octet-stream"이라고 말하고 올바른 콘텐츠 유형으로 재정의하더라도 작동하지 않습니다.
먼저 curb
gem이있는 이미지 를 a에 다운로드 한 TempFile
다음 임시 파일 객체를 지정하고 모델을 저장하십시오.
도움이 될 수 있습니다. 다음은 원격 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
그것들이 오래된 답변이므로 여기에 새로운 답변이 있습니다.
데이터베이스의 원하는 컨트롤러에 이미지 원격 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" %>
이것은 하드 코어 방법입니다.
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를 만듭니다.
공식 문서에 https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL 에보고되어 있습니다.
어쨌든 그것은 클립의 마지막 버전에서 무언가가 바뀌 었고이 코드 줄은 더 이상 유효하지 않기 때문에 업데이트되지 않은 것 같습니다.
user.picture = URI.parse(url)
It raise an error, in particular this error is raised:
Paperclip::AdapterRegistry::NoHandlerError: No handler found for #<URI:: ...
The new correct syntax is this one:
url = "https://www.example.com/photo.jpeg"
user.picture = Paperclip.io_adapters.for(URI.parse(url).to_s, { hash_digest: Digest::MD5 })
Also we need to add these lines into config/initializers/paperclip.rb file:
Paperclip::DataUriAdapter.register
Paperclip::HttpUrlProxyAdapter.register
Tested this with paperclip version 5.3.0
and it works.
참고URL : https://stackoverflow.com/questions/4049709/save-image-from-url-by-paperclip
'programing tip' 카테고리의 다른 글
String []을 ArrayList로 변환하는 방법 (0) | 2020.07.16 |
---|---|
Android에서 HTTP GET 요청에 매개 변수를 추가하는 방법은 무엇입니까? (0) | 2020.07.16 |
두 목록을 요소별로 곱하는 방법은 무엇입니까? (0) | 2020.07.16 |
Django : 문자열에서 모델을 가져 오시겠습니까? (0) | 2020.07.16 |
디버깅하지 않는 경우 Android Studio에서 "디버거 대기 중"이라고 표시하는 이유는 무엇입니까? (0) | 2020.07.16 |