복붙노트

[RUBY-ON-RAILS] 클립에 의해 URL에서 이미지 저장

RUBY-ON-RAILS

클립에 의해 URL에서 이미지 저장

나에게 종이 클립에 의해 URL에서 이미지를 저장하는 방법을 제안 해주십시오.

해결법

  1. ==============================

    1.다음은 간단한 방법은 다음과 같습니다

    다음은 간단한 방법은 다음과 같습니다

    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"
    
  2. ==============================

    2.종이 클립 3.1.4에서 그것은 더 간단되고있다.

    종이 클립 3.1.4에서 그것은 더 간단되고있다.

    def picture_from_url(url)
      self.picture = URI.parse(url)
    end
    

    이 오픈 (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"
    
  3. ==============================

    3.내가 구문 분석 URI에 대한 "열기"를 사용 할 때까지 나를 위해 작동하지 않았다. 내가 "열기"를 추가하면 일했다!

    내가 구문 분석 URI에 대한 "열기"를 사용 할 때까지 나를 위해 작동하지 않았다. 내가 "열기"를 추가하면 일했다!

    def picture_from_url(url)
      self.picture = URI.parse(url).open
    end
    

    내 클립 버전은 4.2.1이다

    이 파일 없었기 때문에 공개하기 전에 그것은, 컨텐츠 타입 권리를 감지하지 않을 것입니다. 나는 그것이 작동하지 않을 권리 콘텐츠 형식을 오버라이드 (override) "이진 / 진수 스트림", 심지어 경우 : 그것은 image_content_type 말할 것입니다.

  4. ==============================

    4.먼저 임시 파일에 재갈 보석으로 이미지를 다운로드 한 다음 단순히 임시 파일 객체를 할당하고 모델 저장.

    먼저 임시 파일에 재갈 보석으로 이미지를 다운로드 한 다음 단순히 임시 파일 객체를 할당하고 모델 저장.

  5. ==============================

    5.그것은 당신에게 도움이 할 수있다. 여기서 원격 URL의 클립 화상을 현재 사용하는 코드이다.

    그것은 당신에게 도움이 할 수있다. 여기서 원격 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
    
  6. ==============================

    6.그 오래된 대답은 여기에 새로운 하나입니다 :

    그 오래된 대답은 여기에 새로운 하나입니다 :

    데이터베이스에서 원하는 컨트롤러로 이미지 원격 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" %>
    
  7. ==============================

    7.이것은 하드 코어 방법입니다 :

    이것은 하드 코어 방법입니다 :

    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를합니다.

  8. ==============================

    8.공식 문서로 여기 https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL보고

    공식 문서로 여기 https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL보고

    어쨌든 그것은 변경 되었기 때문에 클립 뭔가의 마지막 버전으로 업데이트되지 보인다 및 코드 줄은 더 이상 유효하지 않습니다 :

    user.picture = URI.parse(url)
    

    그것은이 오류가 발생, 특히 오류를 인상 :

    Paperclip::AdapterRegistry::NoHandlerError: No handler found for #<URI:: ...
    

    새로운 올바른 구문이 하나입니다 :

    url = "https://www.example.com/photo.jpeg"
    user.picture = Paperclip.io_adapters.for(URI.parse(url).to_s, { hash_digest: Digest::MD5 })
    

    또한 우리는 설정 / 초기화 / paperclip.rb 파일에 다음 줄을 추가합니다 :

    Paperclip::DataUriAdapter.register
    Paperclip::HttpUrlProxyAdapter.register
    

    클립 버전 5.3.0로 이것을 테스트하고 그것을 작동합니다.

  9. from https://stackoverflow.com/questions/4049709/save-image-from-url-by-paperclip by cc-by-sa and MIT license