Proszę zasugerować mi sposób na zapisanie obrazu z adresu URL przez Paperclip.
ruby-on-rails
ruby
upload
paperclip
khanh
źródło
źródło
update_attributes
Zmień nazwępicture_from_url
, abypicture_url=(value)
na przykład.user.picture_from_url('/etc/password')
. Jednak prawdopodobnie jest w porządku w większości sytuacji.open(url)
, nazwa pliku nie jest dokładna, np.open-uri20150106-10034-lpd5fm.
Zamiastef3a601e_ef3d008b_ef3d0f7e.jpg
.W Paperclip 3.1.4 stało się to jeszcze prostsze.
Jest to nieco lepsze niż open (url). Ponieważ w przypadku open (url) jako nazwę pliku otrzymasz „stringio.txt”. Z powyższym otrzymasz właściwą nazwę pliku na podstawie adresu URL. to znaczy
źródło
application/octet_stream
jakocontent_type
.U mnie nie działało, dopóki nie użyłem „open” dla przeanalizowanego identyfikatora URI. po dodaniu „otwórz” zadziałało!
Moja wersja spinacza to 4.2.1
Przed otwarciem nie wykryłby prawidłowego typu zawartości, ponieważ nie był to plik. Powiedziałby image_content_type: "binarny / strumień oktetu", a nawet gdybym nadpisał go odpowiednim typem treści, nie zadziała.
źródło
Najpierw pobierz obraz z
curb
klejnotem do pliku,TempFile
a następnie po prostu przypisz obiekt tymczasowego pliku i zapisz model.źródło
Może ci się to przydać. Oto kod wykorzystujący spinacz i obraz obecny w zdalnym adresie URL.
W modelu
źródło
Ponieważ to są stare Odpowiedź, oto nowsza:
Dodaj zdalny adres URL obrazu do żądanego kontrolera w bazie danych
Edytuj swój model
* W Rails4 musisz dodać attr_accessible w kontrolerze.
Zaktualizuj swój formularz, jeśli zezwalasz innym na przesyłanie obrazu z adresu URL
źródło
super
za?super
służy do wywoływania oryginalnej metody, wyszukiwanie treści metody rozpoczyna się w superklasie obiektu, w którym znaleziono oryginalną metodęTo jest metoda hardcore:
gdzie Uuid.uuid po prostu tworzy losowy identyfikator.
źródło
Do oficjalnej dokumentacji zgłoszono tutaj https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL
W każdym razie wygląda na to, że nie został zaktualizowany, ponieważ w ostatniej wersji spinacza coś się zmieniło i ta linia kodu nie jest już poprawna:
Podnosi błąd, w szczególności ten błąd jest podnoszony:
Nowa poprawna składnia to:
Musimy również dodać te linie do pliku config / initializers / paperclip.rb :
Przetestowałem to z wersją spinacza
5.3.0
i działa.źródło