답변:
이 시도:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
IO.copy_stream(open('http://example.com/image.png'), 'destination.png')
require 'open-uri'
, 그냥 그 코드를 사용했습니다
더 짧은 버전 :
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
동일한 파일 이름을 유지하려면
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
PaperClip을 사용하는 경우 이제 URL에서 다운로드하면 자동으로 처리됩니다.
다음과 같은 것이 있다고 가정합니다.
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
모델에서 이미지를 다음과 같이 URL로 지정하십시오 (고의적으로 작성 됨).
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
아마도 이것을 모델의 메소드에 넣기를 원할 것입니다. 이것은 Heroku의 임시 파일 시스템에서도 잘 작동합니다.
클립이 거기에서 가져옵니다.
출처 : 클립 문서
표준 라이브러리에서 Net :: HTTP 를 확인하십시오 . 이 문서는 HTTP를 사용하여 문서를 다운로드하는 방법에 대한 몇 가지 예를 제공합니다.
Kernel#open
에는 파일 액세스뿐만 아니라 파이프 기호 (예 :)를 접두어로 사용하여 프로세스를 호출 할 수 있으므로 더 많은 가시성이 필요합니다 open("| ls")
. 따라서의 인수에 변수 입력을 사용하면 심각한 보안 위험이 발생할 수 있습니다 Kernel#open
.