Multer jest węzłem.js middleware do obsługi multipart/form-data, który jest używany głównie do przesyłania plików. Jest napisane na górze busboy dla maksymalnej wydajności.

Uwaga: Multer nie przetworzy żadnego formularza, który nie jest częścią wieloczęściową (multipart/form-data).

instalacja

npm install --save multer

użycie

Multer dodaje obiekt body i obiekt file lub files do obiektu request. Obiekt body zawiera wartości pól tekstowych formularza, obiekt file lub files zawiera pliki przesłane za pośrednictwem formularza.

podstawowy przykład użycia:

const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.single('avatar'), (req, res, next) => { // req.file is the `avatar` file // req.body will hold the text fields, if there were any})app.post('/photos/upload', upload.array('photos', 12), (req, res, next) => { // req.files is array of `photos` files // req.body will contain the text fields, if there were any})const cpUpload = upload.fields()app.post('/cool-profile', cpUpload, (req, res, next) => { // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files // // e.g. // req.files -> File // req.files -> Array // // req.body will contain the text fields, if there were any})

w przypadku, gdy potrzebujesz obsłużyć formularz wieloczęściowy tylko tekstowy, możesz użyć metody .none(), przykład:

const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.none(), (req, res, next) => { // req.body contains the text fields})

API

informacje o pliku

każdy plik zawiera następujące informacje:

klucz opis
fieldName Nazwa pola podana w formularzu
originalName nazwa pliku na komputerze użytkownika (undefined jeśli klient nie podał nazwy pliku)
size Rozmiar pliku w bajtach
stream strumień pliku
detectedMimeType wykrytego typu mime, lub null, jeśli nie udało nam się wykryć
detectedFileExtension typowe rozszerzenie pliku dla plików wykrytego typu, lub pusty łańcuch, jeśli nie udało się wykryć (z wiodącym ., aby dopasować path.extname)
clientReportedMimeType typ mime zgłaszany przez Klienta za pomocą nagłówka Content-Type lub null1, jeśli nagłówek był nieobecny
clientReportedFileExtension rozszerzenie przesłanego pliku (jak donosi path.extname)

1 obecnie zwraca text/plain jeśli nagłówek jest nieobecny, jest to błąd, który zostanie naprawiony w wydaniu łatki. Nie polegaj na tym zachowaniu.

multer(opts)

Multer akceptuje obiekt options, oto opcje, które można przypisać do Multera.

klucz opis
limits ograniczenia przesyłanych danych (pełny opis)

.single(fieldname)

Akceptuj pojedynczy plik o nazwie fieldname. Pojedynczy plik będzie przechowywany w req.file.

.array(fieldname)

Akceptuj tablicę plików o nazwie fieldname. Opcjonalnie błąd, jeśli przesyłanych jest więcej niż maxCount plików. Tablica plików będzie przechowywana wreq.files.

.fields(fields)

Akceptuj mieszankę plików, określoną przez fields. Obiekt z tablicami plików będzie przechowywany w req.files.

fields powinna być tablicą obiektów z name i opcjonalnie maxCount.Przykład:

.none()

Akceptuj tylko pola tekstowe. Jeśli zostanie przesłany jakikolwiek plik, zostanie wyświetlony błąd z kodem „LIMIT_UNEXPECTED_FILE”. To jest to samo co Robienie upload.fields().

.any()

akceptuje wszystkie pliki, które przychodzą przez przewód. Tablica plików będzie przechowywana wreq.files.

Ostrzeżenie: Upewnij się, że zawsze obsługujesz pliki przesłane przez użytkownika.Nigdy nie dodawaj multer jako globalnego oprogramowania pośredniczącego, ponieważ złośliwy użytkownik mógł przesyłać pliki do trasy, której nie przewidziałeś. Używaj tej funkcji tylko na routesgdzie obsługujesz przesłane pliki.

limits

obiekt określający limity wielkości następujących opcjonalnych właściwości. Multer przekazuje ten obiekt bezpośrednio do busboya, a szczegóły właściwości można znaleźć na stronie busboya.

dostępne są następujące limity:

klucz opis domyślny
fieldNameSize maksymalny rozmiar nazwy pola '100B'
fieldSize maksymalny rozmiar wartości pola '8KB'
fields Maksymalna liczba pól niezwiązanych z plikiem 1000
fileSize maksymalny rozmiar pliku '8MB'
files Maksymalna liczba pól pliku 10
headerPairs Maksymalna liczba nagłówków key = >pary wartości do parsowania 2000 (tak samo jak http węzła)

limity bajtów mogą być przekazywane jako Liczba lub jako ciąg znaków z odpowiednim prefiksem.

określenie limitów może pomóc w ochronie witryny przed atakami typu DoS (denial of service).

obsługa błędów

w przypadku napotkania błędu multer deleguje błąd do wyrażenia. Możesz odtworzyć ładną stronę błędu za pomocą standardowego sposobu ekspresowego.

jeśli chcesz wyłapać błędy specjalnie z multer, możesz samodzielnie wywołać funkcję themiddleware.

const upload = multer().single('avatar')app.post('/profile', (req, res) => { upload(req, res, (err) => { if (err) { // An error occurred when uploading return } // Everything went fine })})

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.