Узел / Малтер | Не удается получить отдельное имя файла на основе имени поля - PullRequest
0 голосов
/ 31 августа 2018

Я создал приложение Express в сочетании с multer для загрузки элементов в мое приложение Node.js

То, что я пытаюсь сделать, это выбрать, скажем:

Upload 1 - that has a fieldname of upfile1
Upload 2 - that has a fieldname of upfile2
Upload 3 - that has a fieldname of upfile3

По сути, мне нужно отдельно выбирать каждый загруженный элемент имени моего мультизагрузочного приложения. Каждая загрузка должна обрабатываться в приложении по-разному для разных задач. Давайте использовать console.log в качестве примера, мне нужно сделать что-то вроде:

console.log(req.body.upfile1.filename);
console.log(req.body.upfile2.filename);
console.log(req.body.upfile3.filename);

для выбора различных элементов, которые обрабатываются в приложении с использованием другого имени поля, определенного в моих представлениях с использованием атрибута имени.

ниже мой код

Просмотров [index.html]

<form id="app-form" method="POST" class="fileupload" method="post" action="app" enctype="multipart/form-data">
<h1>Multi File Uploads</h1>
<input type="file" name="upfile1" value="">
<input type="file" name="upfile2" value="">
<input type="file" name="upfile3" value="">
<input type="submit" />
</form>

NodeJS [app.js]

app.get("/", function(req, res) {
  res.sendFile(__dirname + "/index.html");
});

app.post("/app", upload.any(), function(req, res) {
 let files = req.files;
 files.forEach(file => {
   console.log(file.filename);
});
 res.send(req.files);
 res.end();
});

Помощь будет очень признателен, спасибо!

1 Ответ

0 голосов
/ 31 августа 2018

Входные элементы в вашей разметке должны быть заключены в форму (они, вероятно, уже заключены в элемент формы, но не показаны в вашем вопросе). Вам также следует установить атрибут enctype формы в multipart / form-data .

<form method="post" enctype="multipart/form-data" action="/upload">
    <input type="file" name="upfile1">
    <input type="file" name="upfile2">
    <input type="file" name="upfile3">

    <input type="submit" value="Submit">
</form>

Как только это будет сделано, вы можете настроить multer и создать маршрут для обработки загрузки файлов:

const upload = multer({
  dest: path.join(__dirname, './upload') // You might want to change this according to your preferences
  // Since you're using any(), you might want to set fileFilter to control which files should be uploaded. See: https://github.com/expressjs/multer#filefilter
});

const findFileByFieldname = (files, fieldname) => {
  return files.find(file => file.fieldname === fieldname) || {};
}

app.post("/upload", upload.any(), (req, res) => {     
  const upfile1Filename = findFileByFieldname(req.files, 'upfile1').filename;
  const upfile2Filename = findFileByFieldname(req.files, 'upfile2').filename;
  const upfile3Filename = findFileByFieldname(req.files, 'upfile3').filename;

  res.json({
    upfile1Filename,
    upfile2Filename,
    upfile3Filename,
  });
});

// Example response (Node v8.11.4, Express v4.16.3, Multer v1.3.1)
// {"upfile1Filename":"360726b532a01b0e31832f067b5922c8","upfile2Filename":"144e1298437afb51f36eb37c77814650","upfile3Filename":"4c908da20e770130377e4006db945af6"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...