expressjs / expressjs/multer

last filename is missing from `req.files` while use of 'fileds' middleware.

Open
#1,261 0 comments 0 reactions 0 assignees View on GitHub
question
Dominant language
JavaScript
Stars
12.1k
Forks
1.1k
Avg merge
8d 2h
Merged PRs (30d)
21

Description

## I was trying to

response which files are uploaded right after client uploaded multiple files.

## Codes

API route to load my lovely multer middleware,

```
app.post("/uploadFiles", uploads, (req, res) => {
try {
const uploadedQueryFiles = req.files?.queryFiles?.map(
console.log(file);
(file) => file.filename
);
const uploadedTargetFiles = req.files?.targetFiles?.map((file) => {
console.log(file);
return file.filename;
});
res.status(200).json({
message: "result of upload:",
uploadedQueryFiles,
uploadedTargetFiles,
});
} catch (err) {
console.log(err);
res.status(500).json({ message: "server error while uploading." });
}
});
```

This gives me logs(from console.log in code above) like below, but the last one doesn't have filename or anything but fieldname.

```log
{
fieldname: 'targetFiles',
originalname: 'originam file name.docx',
encoding: '7bit',
mimetype: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
destination: 'INPUT/target',
filename: 'new file name.docx',
path: 'INPUT/target/new file name.docx',
size: 15882
}
{ fieldname: 'targetFiles' }
```

how I configured middleware

```js
// QUERY 저장소
const queryStorage = multer.diskStorage({
destination: (_req, _file, cb) => {
// req.params등을 통해서 동적으로 폴더, 파일명을 생성할 수도 있다.
// https://stackoverflow.com/questions/59646445/multer-create-folder-if-not-exist
const path = "INPUT/query";
fs.mkdirSync(path, { recursive: true });
return cb(null, path);
},
filename: (_req, file, cb) => {
cb(null, Buffer.from(file.originalname, "latin1").toString("utf8"));
},
});

// TARGET(DATA) 저장소
const targetStorage = multer.diskStorage({
destination: (_req, _file, cb) => {
const path = "INPUT/target";
fs.mkdirSync(path, { recursive: true });
return cb(null, path);
},
filename: (_req, file, cb) => {
cb(null, Buffer.from(file.originalname, "latin1").toString("utf8"));
},
});

const queryDest = multer({
storage: queryStorage,
fileFilter: (_req, file, cb) =>
file.fieldname === "queryFiles" ? cb(null, true) : cb(null, false),
});
const targetDest = multer({
storage: targetStorage,
fileFilter: (_req, file, cb) =>
file.fieldname === "targetFiles" ? cb(null, true) : cb(null, false),
});

const uploads = (req, res, next) => {
queryDest.fields([{ name: "queryFiles" }, { name: "targetFiles" }])(
req,
res,
next
);
targetDest.fields([{ name: "queryFiles" }, { name: "targetFiles" }])(
req,
res,
next
);
};
```

## There is a man facing same one

in [stackoverflow](https://stackoverflow.com/questions/70589525/express-js-multer-upload-files-last-file-missing)

Unfortunately, he got no proper answer yet.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.