使用 express-fileupload 在 nodejs 中上传多个文件?
Multiple file uploads in nodejs using express-fileupload?
目前我可以 post 将此 mongodb。效果很好。
问题
我应该能够 post 许多附件,而不是一个附件,N 个上传将有 N 个不同的按钮可用。
const form = (req, res, next) => {
const file = req.files.photo;
file.name = `photo_${Math.random(0, 10012)}-${Math.random(0, 2000)}${
path.parse(file.name).ext
}`;
file.mv(`./public/uploads/${file.name}`, async (err) => {
if (err) {
console.error(err);
return res.status(500).json({
message: `Problem With File Upload`,
});
}
const upload = await Form.create({
approved: req.body.approved,
email_: req.body.email,
formData: {
name: "req.body.formData.claimantName",
nationality: "req.body.formData.claimantNationality",
address: "req.body.formData.claimantAddress",
email: "req.body.formData.claimantEmail",
},
fileOne: file.name1,
// these are the next
// fileTwo: req.body.formData.name2,
// fileThree: req.body.formData.name3,
});
return res.status(200).json({
success: true,
message: `File Uploaded Successfully`,
path: file.name,
});
});
};
router.route("/add").post(form);
我尝试将 const upload = await Form.create(...)
移动到 file.mv(...)
块之外,然后做类似这样的事情```
const file1 = req.files.photo1;
file1.name = photo_${Math.random(0, 10012)}-${Math.random(0, 2000)}${ path.parse(file1.name).ext }
;
It doesn't work properly.
我认为您可以在接收 req.files
对象中的请求的端点上的节点服务器中的 request
对象中获取上传的文件。
您的端点应该捕获这样的文件
const uploads = Object.values(req.files);
因为您将获得键值对的对象,因为 key
将是文件名 value
将是包含名称等的文件数据对象。 Object.values
将转换它对象到具有上传文件信息的对象数组。之后创建一个 promise
来捕获如下所示的文件:
处理文件上传的函数
handleFileUpload = (uploads) => {
return new Promise((resolve, reject) => {
const dbData = [];
uploads.forEach(async (upload) => {
const name = await `photo_${Math.random(0, 10012)}-${Math.random(0, 2000
)}${path.parse(upload.name).ext}`;
dbData.push(name);
await upload.mv(`your-path/${name}`, async (err) => {
if (err) {
reject("Something wrong");
}
});
});
resolve(dbData);
});
};
之后将上传传递给 promise 并在 then
块中创建数据库 insertion
。
handleFileUpload(uploads).then((response) => { ... }).catch((e) => { ... });
response
将包含所有图像路径。
注意 :我正在考虑将文件 IMAGES
目前我可以 post 将此 mongodb。效果很好。
问题 我应该能够 post 许多附件,而不是一个附件,N 个上传将有 N 个不同的按钮可用。
const form = (req, res, next) => {
const file = req.files.photo;
file.name = `photo_${Math.random(0, 10012)}-${Math.random(0, 2000)}${
path.parse(file.name).ext
}`;
file.mv(`./public/uploads/${file.name}`, async (err) => {
if (err) {
console.error(err);
return res.status(500).json({
message: `Problem With File Upload`,
});
}
const upload = await Form.create({
approved: req.body.approved,
email_: req.body.email,
formData: {
name: "req.body.formData.claimantName",
nationality: "req.body.formData.claimantNationality",
address: "req.body.formData.claimantAddress",
email: "req.body.formData.claimantEmail",
},
fileOne: file.name1,
// these are the next
// fileTwo: req.body.formData.name2,
// fileThree: req.body.formData.name3,
});
return res.status(200).json({
success: true,
message: `File Uploaded Successfully`,
path: file.name,
});
});
};
router.route("/add").post(form);
我尝试将 const upload = await Form.create(...)
移动到 file.mv(...)
块之外,然后做类似这样的事情```
const file1 = req.files.photo1;
file1.name = photo_${Math.random(0, 10012)}-${Math.random(0, 2000)}${ path.parse(file1.name).ext }
;
It doesn't work properly.
我认为您可以在接收 req.files
对象中的请求的端点上的节点服务器中的 request
对象中获取上传的文件。
您的端点应该捕获这样的文件
const uploads = Object.values(req.files);
因为您将获得键值对的对象,因为 key
将是文件名 value
将是包含名称等的文件数据对象。 Object.values
将转换它对象到具有上传文件信息的对象数组。之后创建一个 promise
来捕获如下所示的文件:
处理文件上传的函数
handleFileUpload = (uploads) => {
return new Promise((resolve, reject) => {
const dbData = [];
uploads.forEach(async (upload) => {
const name = await `photo_${Math.random(0, 10012)}-${Math.random(0, 2000
)}${path.parse(upload.name).ext}`;
dbData.push(name);
await upload.mv(`your-path/${name}`, async (err) => {
if (err) {
reject("Something wrong");
}
});
});
resolve(dbData);
});
};
之后将上传传递给 promise 并在 then
块中创建数据库 insertion
。
handleFileUpload(uploads).then((response) => { ... }).catch((e) => { ... });
response
将包含所有图像路径。
注意 :我正在考虑将文件 IMAGES