Wdrożenie w pełni funkcjonalnego przesyłania multimediów w aplikacji internetowej

Załóżmy, że mamy aplikację internetową, która obsługuje tworzenie, odczytywanie, aktualizowanie i usuwanie artykułów, a każdy artykuł powinien mieć galerię obrazów. Muszę nawiązać jeden do jednego związku między artykułem a galerią i jeden do wielu relacji między galerią a mediami.

HTML5 daje wiele funkcji, takich jak multiupload, więc chcę użyć tego doskonalehttp://blueimp.github.io/jQuery-File-Upload/ wtyczka do tego. Problem polega na tym, jak obsługiwać przesyłanie plików „w pamięci”, jak dane innych formularzy?

Na przykład, gdy pokażemy stronę do utworzenia nowego artykułu, powinniśmy być w stanie wypełnić pola danych artykułu i wybrać obrazy do przesłania, a następnie, gdy klikniemy przycisk Zapisz, obrazy powinny rozpocząć przesyłanie, a następnie formularz powinien zostać przesłany. Gdy walidacja nie powiedzie się, obrazy powinny być nadal wyświetlane na interfejsie, ale po stronie serwera należy zapisać.

Jednym z rozwiązań jest utworzenie czegoś takiego jak „create entity session tymczasowy identyfikator” przed wyświetleniem całego formularza, a ten identyfikator może zostać użyty do utworzenia tymczasowego katalogu do zapisywania przesyłanych plików, więc po pomyślnym zapisaniu formularza obrazy te można przenieść do odpowiedniego katalogu, ale jak zrobić „tymczasowy identyfikator sesji tworzenia podmiotu”?

Innym rozwiązaniem, które myślę, jest podejście „z edytowanym identyfikatorem”, ponieważ możemy obsłużyć przesłane pliki z wcześniej zapisanym identyfikatorem galerii, ale czasami nie mogę zapisać nowego pustego artykułu w galerii, ponieważ niektóre pola nie powinny być puste w db.

Za szyny widziałemhttps://github.com/ thoughttbot/paperclip klejnot, który w pliku Readme mówi:

Paperclip jest przeznaczony do łatwego dołączania plików do Active Record. Zamierzeniem było utrzymanie konfiguracji tak łatwo, jak to możliwe, i traktowanie plików tak jak innych atrybutów. Oznacza to, że nie są zapisywane w swoich ostatecznych lokalizacjach na dysku, ani nie są usuwane, jeśli ustawione na zero, dopóki nie zostanie wywołany ActiveRecord :: Base # save.

Moje pytanie brzmi: jak to działa?

questionAnswers(2)

yourAnswerToTheQuestion