Jak mogę pobrać plik z adresu URL i zapisać go w Rails?
Mam adres URL do obrazu, który chcę zapisać lokalnie, dzięki czemu mogę użyć Paperclip do stworzenia miniatury dla mojej aplikacji. Jaki jest najlepszy sposób na pobranie i zapisanie obrazu? (Zajrzałem do obsługi plików ruby, ale na nic się nie natknąłem.)
6 answers
Spróbuj tego:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-22 16:18:33
Jeszcze krótsza wersja:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Aby zachować tę samą nazwę pliku:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 00:00:24
Jeśli używasz PaperClip, pobieranie z adresu URL jest teraz obsługiwane automatycznie.
Zakładając, że masz coś takiego:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
Na twoim modelu wystarczy podać obrazek jako adres URL, coś w tym stylu (napisane celowo długopisem):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
Prawdopodobnie będziesz chciał umieścić to w metodzie w swoim modelu. Będzie to również działać dobrze na tymczasowym systemie plików Heroku.
Spinacz zajmie się tym.
Źródło: spinacz dokumentacja
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-30 09:58:46
Myślę, że to jest najczystszy sposób:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-01 20:12:58
Sprawdź Net:: HTTP w bibliotece standardowej. Dokumentacja zawiera kilka przykładów pobierania dokumentów za pomocą protokołu HTTP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-25 13:42:17
Oto prawdopodobnie najprostszy sposób:
IO.copy_stream(URI.open("https://i.pinimg.com/originals/24/17/d6/2417d6b3f3dc236b0b5b80fb00b3a791.png"), 'destination.png')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-19 14:18:09