last filename is missing from `req.files` while use of 'fileds' middleware.
- 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
Assessment
This issue has not been assessed yet.