Mam adres URL obrazu, który chcę zapisać lokalnie, dzięki czemu mogę użyć Paperclip do utworzenia miniatury dla mojej aplikacji. Jaki jest najlepszy sposób na pobranie i zapisanie obrazu? (Zajrzałem do obsługi plików ruby, ale niczego nie spotkałem.)
ruby-on-rails
ruby
file-handling
Alok Swain
źródło
źródło
IO.copy_stream(open('http://example.com/image.png'), 'destination.png')
require 'open-uri'
, po prostu użyłem kodu pod nimJeszcze krótsza wersja:
Aby zachować tę samą nazwę pliku:
źródło
Jeśli używasz PaperClip, pobieranie z adresu URL jest teraz obsługiwane automatycznie.
Zakładając, że masz coś takiego:
W swoim modelu po prostu określ obraz jako adres URL, coś w tym stylu (napisane celowo):
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 zabierze go stamtąd.
źródło: dokumentacja spinacza
źródło
Myślę, że jest to najwyraźniejszy sposób:
źródło
Sprawdź Net :: HTTP w standardowej bibliotece. Dokumentacja zawiera kilka przykładów pobierania dokumentów za pomocą protokołu HTTP.
źródło
Kernel#open
umożliwia nie tylko dostęp do pliku, ale także proces wywoływania przez prefiks symbolu potoku (npopen("| ls")
.). Może więc prowadzić do poważnego zagrożenia bezpieczeństwa, stosując zmienne dane wejściowe do argumentuKernel#open
.