2016-03-19 20 views
5

W jaki sposób można uzyskać multer akceptować pliki z wielu pól typu pliku?Przesyłanie wielu plików za pomocą multer, ale z różnych pól?

Mam następujący kod, który przesyła pojedynczy plik, używając multer w node.js:

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
    callback(null, './public/uploads'); 
    }, 
    filename: function (req, file, callback) { 
    callback(null, file.fieldname + '-' + Date.now()); 
    } 
}); 

var upload = multer({ storage : storage }); 

app.post('/rest/upload', upload.array('video', 1), function(req, res, next){ 
    ... 
} 

Z poniższego formularza, pod warunkiem tylko pole wideo ma wartość (jeśli mogę określić zarówno I uzyskać „Nieoczekiwane pole” error):

<form action="/rest/upload" method="post" enctype="multipart/form-data"> 
    <label>Video file: </label> <input type="file" name="video"/> 
    <label>Subtitles file: </label> <input type="file" name="subtitles"/> 
    <input type="submit"/> 
</form> 

to nie wynika z dokumentacji, jak podejść do tego? Wszelkie sugestie będą mile widziane. BTW Próbowałem następujących wariantów parametrów, bez powodzenia:

app.post('/rest/upload', [upload.array('video', 1), upload.array('subtitles', 1)] ... 
app.post('/rest/upload', upload.array('video', 1), upload.array('subtitles', 1), ... 
app.post('/rest/upload', upload.array(['video', 'subtitles'], 1), ... 

Odpowiedz

12

Co chcesz jest upload.fields():

app.post('/rest/upload', 
     upload.fields([{ 
      name: 'video', maxCount: 1 
     }, { 
      name: 'subtitles', maxCount: 1 
     }]), function(req, res, next){ 
    // ... 
} 
2

Czy próbowałeś użyć multer().any()?

+0

nie miałem, chociaż pójdę z uploads.fields() podejście, jak sugeruje dokumentacji any() prawdopodobnie nie jest najlepszym rozwiązaniem, z punktu A obsługa i perspektywa bezpieczeństwa. –

Powiązane problemy