2015-03-14 13 views
7

Próbuję zbudować witrynę e-commerce ze stroną administratora, na której administrator może przesłać obrazy niektórych produktów. Chciałbym, aby Meteor załadował te obrazy do folderu, a następnie wyświetlił te obrazy na stronie produktu tego produktu.Przesyłanie i wyświetlanie obrazu Meteor JS

Wiem, że zwykle pliki obrazów, których klient będzie używał, powinny znajdować się w folderze "publicznym", ale chciałbym dowiedzieć się więcej o innych opcjach, jakie mogę mieć.

Ponadto, jeśli prześlę nowy plik do "publicznego" folderu lub jeśli usunę plik w "publicznym" folderze, witryna odświeży się ... i jest to dobre i złe w tym samym czasie w zależności od czego efektem są po ....

Oto moje pytania:

  1. Co jeśli utworzyć folder „przesłane” na serwerze i przesłać zdjęcia do tego folderu. Czy byłoby możliwe wyświetlanie obrazów w folderze "uploads" w przeglądarce klienta ??? W jaki sposób??
  2. Czy istnieje sposób korzystania z przeglądarki w celu uzyskania dostępu do zawartości "publicznego" folderu?
  3. Czy istnieje sposób na zatrzymanie "reaktywności" witryny, jeśli zmiany nastąpią w folderze "przesłanych plików"?
  4. Czy przesyłanie obrazów do "publicznego" folderu jest najlepszym dostępnym rozwiązaniem tego problemu?

Dziękuję bardzo za pomoc

Odpowiedz

8

Gdy mamy do czynienia z tym, co będzie prawdopodobnie duża liczba obrazów lubię odciążyć nie tylko przechowywania, ale także przetwarzanie osobie trzeciej.

Moja aplikacja do odwiedzenia w tej sytuacji będzie w chmurze. Oto dlaczego:

  • Przechowywanie - mogę przechowywać oryginalne obrazy poza moją aplikacją. Ogromna korzyść z synchronizacji zdjęć od deweloperów do prod.
  • CDN - Dostaję dodatkowe korzyści z szybkiego wczytania obrazów z CloudNine CDN.
  • Przetwarzanie bez obciążenia - Wszystkie przetwarzanie obrazów jest obsługiwane przez Cloudinary, która nie spowalnia mojej aplikacji jako całości.
  • Manipulacja obrazem - mogę wykonywać połączenia z oryginalnym obrazem, połączenia, aby uzyskać miniaturę i wywoływać zmiany w manipulowaniu, tj .: efekt => skala szarości. Więc jeśli obraz 1000x1000px został przesłany, mogę zażądać 50x50px z Cloudinary, który zwróci obraz przycięty do tego dokładnego rozmiaru, zamiast używać CSS do zmniejszenia dużego obrazu.
  • Elastyczność - mogę zmieniać rozmiar obrazów i zwracać ten dokładny rozmiar do aplikacji bez konieczności ponownego przesyłania zdjęć. Jeśli na przykład moja strona produktu ma kciuki o rozmiarze 40 pikseli, mogę łatwo wykonać połączenie, by pobrać ten sam obraz o wielkości 50 pikseli.

Mam nadzieję, że to pomoże. http://cloudinary.com/

+1

Sam sobie poradziłem z tą sytuacją. Korzystanie z chmury było niezwykle proste w implementacji i przynosi ogromne korzyści. – pimbrouwers

2

Możesz zrobić to wszystko za pomocą pakietu meteorytów collectionFS. Pakiet jest dobrze udokumentowany i masz wiele opcji, które możesz wykorzystać do przechowywania przesłanych plików. CollectionFS daje także możliwość manipulacji obrazem podczas przesyłania, na przykład tworzenia miniaturki o zmienionym rozmiarze.

+0

Witaj, collectionFS zależy od cfs: gridfs i zgodnie z https://atmospherejs.com/cfs/gridfs cfs: gridfs jest "pod aktywnym rozwojem już teraz (2014-3-31). Ma on błędy i API kontynuuj zmianę. Pomóż to przetestować i naprawić błędy, , ale nie używaj ich jeszcze w produkcji. " Czy to oznacza, że ​​collectionFS nie jest już wiarygodny i zawierałby błędy, ponieważ jego zależność zawiera również błędy? Czy nadal zalecałbyś korzystanie z collectionFS? Dziękuję Ci bardzo. – preston

1

Uświadomiłem sobie, że to pytanie jest trochę stare. Miałem ten sam problem, jednym z rozwiązań, które działa dla mnie jest użycie

1

Zdecydowanie nie przechowuj rzeczy w publicznym katalogu - spowolni uruchamianie aplikacji, a gorący kod odświeży się podczas przesyłania zdjęć łatwo spowodować awarię, gdy pojawi się przyzwoita liczba zdjęć.

Wszystkie powyższe rozwiązania z przechowywaniem obrazów w innym miejscu będą działać. Inną opcją jest użycie pakietu peerlibrary: aws-sdk do przesłania rzeczy do S3, z czego korzystam w przypadku kilku aplikacji i które okazały się bardzo czyste.

1

Przechowywanie obrazu jako łańcucha base64 w MongoDB jest również metodą. Przydatny w przypadku publikowania w interfejsach API i oszczędzania obaw związanych z obsługą innych firm zewnętrznych.