URL에서 파일을 다운로드하여 레일즈에 저장하려면 어떻게 해야 합니까?
로컬로 저장하고 싶은 이미지의 URL을 가지고 있어 Paperclip을 사용하여 응용프로그램의 썸네일을 생성할 수 있습니다.이미지를 다운로드하고 저장하는 가장 좋은 방법은 무엇입니까?(Ruby 파일 처리에 대해 알아봤지만 아무 것도 발견되지 않았습니다.)
사용해 보십시오.
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
더 짧은 버전:
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의 임시 파일 시스템에서도 잘 작동할 것입니다.
종이클립이 거기서 가져갈 겁니다.
출처: 페이퍼클립 설명서
저는 이것이 가장 확실한 방법이라고 생각합니다.
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
표준 라이브러리에서 Net::HTTP를 확인하십시오.설명서는 HTTP를 사용하여 문서를 다운로드하는 방법에 대한 몇 가지 예를 제공합니다.
가장 간단한 방법:
require 'open-uri'
image_url = "https://i.imgur.com/ZWnhY9T.png"
IO.copy_stream(URI.open(image_url), 'destination.png')
Ruby 3 이상을 사용하면 승인된 답변을 사용하면 다음 오류가 발생합니다.
해당 파일 또는 디렉토리 @rb_sysopen - http://example.com/image.png (Errno::ENONT)
해결책은 다음과 같습니다.URI.open
대신에Kernel.open
예:
require "uri"
download = URI.open('http://example.com/image.png')
File.write('~/image.png', download)
위의 예는 모두 훌륭합니다.저의 경우 URL의 이미지에서 다운로드 링크를 만들고 싶었습니다.
다운로드 폴더에 다운로드할 수 있도록 하려면 컨트롤러에서 다음 코드를 사용할 수 있습니다.
require 'open-uri'
file_type = url.to_s.split(".")[-1]
send_data open(url).read, filename: "some_name.#{file_type}", type: "image/#{file_type}", disposition: "attachment"
언급URL : https://stackoverflow.com/questions/2515931/how-can-i-download-a-file-from-a-url-and-save-it-in-rails
'programing' 카테고리의 다른 글
테이블이 레일에 있는지 확인합니다. (0) | 2023.05.31 |
---|---|
iOS - 코코아 포드에서 헤더 파일을 찾을 수 없는 빌드 실패 (0) | 2023.05.31 |
KDiff3를 git에 대한 병합 도구 및 diff 도구로 구성하려면 어떻게 해야 합니까? (0) | 2023.05.31 |
루비 - 배열 테스트 (0) | 2023.05.31 |
Postgre에서 날짜로부터 연도와 월을 추출하는 방법to_char() 함수를 사용하지 않는 SQL? (0) | 2023.05.31 |