1

目前我可以将其发布到 mongodb。它工作正常。

问题 我应该能够发布许多彼此独立的附件,而不是一个附件,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;

文件1.name = photo_${Math.random(0, 10012)}-${Math.random(0, 2000)}${ path.parse(file1.name).ext };

It doesn't work properly.
4

1 回答 1

2

request我认为您可以在接收对象请求的端点上的节点服务器中的对象中获取上传的文件req.files

您的端点应该捕获这样的文件

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 并insertionthen块中创建一个 db。

handleFileUpload(uploads).then((response) => { ... }).catch((e) => { ... });

response具有所有图像路径。

注意:我正在考虑将文件IMAGES

于 2020-10-10T07:40:06.797 回答