2016-03-19 4 views
5

Как я могу использовать multer для приема файлов из нескольких полей типа файла?Загрузка нескольких файлов с помощью multer, но из разных полей?

У меня есть следующий код, который загружает один файл, используя multer в 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){ 
    ... 
} 

Из следующей формы, при условии, только поле видео имеет значение (если указать как я получить сообщение об ошибке «Неожиданное поле»):

<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> 

Непонятно из документации, как подойти к этому? Мы ценим любые предложения. КСТАТИ я попытался следующие изменения параметров, без успеха:

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), ... 

ответ

12

Что вы хотите upload.fields():

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

Пробовали ли вы использовать multer().any()?

+0

у меня не было, хотя я пойду с uploads.fields() подход, как следует из документации любого(), вероятно, не самый лучший подход, от обработки и безопасности. –

Смежные вопросы