Proszę wziąć pod uwagę nowsze odpowiedzi, które zawierają bardziej aktualne informacje, ponieważ wiele się zmieniło na przestrzeni lat!
Ponieważ wiele nowych bibliotek Node.js szybko staje się przestarzałych, i tak jest stosunkowo niewiele przykładów, które chciałbym zapytać o przesyłanie obrazów za pomocą:
- Node.js (wersja 0.4.1)
- Express (1.0.7)
- Mongoose (1.1.0).
Jak inni to zrobili?
Znalazłem: groźne dla węzłów , ale generalnie jestem nowy w przesyłaniu obrazów, więc chcę nauczyć się ogólnych rzeczy i sposobów robienia tego za pomocą Node.js i Express.
npm install multer --save
a następnie w aplikacji możesz uzyskać dostępreq.files.your_file_param_name
i zapisać do s3 za pomocąaws-sdk
lubfs.writeFile(...)
Odpowiedzi:
Odpowiem na swoje pytanie po raz pierwszy. Znalazłem przykład prosto ze źródła. Proszę wybacz biedne wcięcie. Nie byłem pewien, jak prawidłowo wciskać podczas kopiowania i wklejania. Kod pochodzi prosto z
multipart/form-data
przykładu Express na GitHub.źródło
Ponieważ używasz express, po prostu dodaj bodyParser:
Twoja trasa automatycznie uzyskuje dostęp do przesłanych plików w req.files:
Jeśli nazwiesz kontrolkę wejścia „todo” w ten sposób (w języku Jade):
Następnie przesłany plik jest gotowy do czasu uzyskania ścieżki i oryginalnej nazwy pliku w „files.todo”:
inne przydatne właściwości wymagane plików:
źródło
bodyParser
jest niepewny, przynajmniej według tego: andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html . Odpowiedź Jona J. zadziałała dla mnie.Oprogramowanie pośredniczące connect body parser można skonfigurować w bloku konfiguracyjnym w głównym pliku aplikacji:
źródło
Widzisz, najlepszą rzeczą, jaką możesz zrobić, jest po prostu załadowanie obrazu na dysk i zapisanie adresu URL w MongoDB. Odpocznij po ponownym odzyskaniu obrazu. Po prostu podaj adres URL, a otrzymasz obraz. Kod do wgrania jest następujący.
Teraz zapisz ścieżkę docelową w bazie danych MongoDB.
Ponownie, podczas pobierania obrazu, po prostu wyodrębnij adres URL z bazy danych MongoDB i użyj go w tej metodzie.
źródło
Wypróbuj ten kod, to pomoże.
źródło
util.pump(ins, ous)
jest amortyzowany, można to zrobićins.pipe(ous);
teraz. Ale czy spowoduje to usunięcie pliku obrazu w starej lokalizacji?Możesz również skorzystać z poniższych, aby ustawić ścieżkę, w której zapisuje plik.
źródło
I stworzył przykład , który używa Express i Multer. Jest to bardzo proste i pozwala uniknąć wszystkich ostrzeżeń Connect
To może komuś pomóc.
źródło
bodyParser
(co jest niebezpieczne, patrz andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html )Ponownie, jeśli nie chcesz używać bodyParser, działa to:
źródło
W przypadku Express 3.0, jeśli chcesz używać potężnych zdarzeń, musisz usunąć wieloczęściowe oprogramowanie pośredniczące, aby móc utworzyć nowe jego wystąpienie.
Aby to zrobić:
Można zapisać jako:
A teraz utwórz obiekt formularza:
Opublikowałem to również na moim blogu, Getting groźny obiekt formularza w Express 3.0 podczas przesyłania .
źródło
Wiem, że pierwotne pytanie dotyczyło konkretnych wersji, ale odnosiło się również do "najnowszych" - post @JohnAllen nie jest już aktualny z powodu Expressjs bodyParser i connect-form
To pokazuje łatwy w użyciu wbudowany bodyParser ():
źródło
Jest moja metoda na wielokrotne przesyłanie plików:
Nodejs:
Upewnij się, że Twój formularz ma enctype = „multipart / form-data”
Mam nadzieję, że to ci pomoże;)
źródło
Oto sposób przesyłania obrazów przy użyciu potężnego pakietu, który jest zalecany w przypadku bodyParser w późniejszych wersjach Express. Obejmuje to również możliwość zmiany rozmiaru obrazów w locie:
Z mojej witryny: przesyłanie i zmiana rozmiaru obrazów (w locie) za pomocą Node.js i Express .
Oto sedno:
UWAGA: Wymaga to Magii obrazu do szybkiej zmiany rozmiaru kciuka.
źródło