首页 > 解决方案 > 从 POST 请求正文 NodeJS 和 Angular 获取文件

问题描述

我正在开发一个 MEAN Stack 应用程序,我正在尝试管理一个允许用户在提交时上传文件的表单。它似乎在客户端工作,但是当我从客户端发送发布请求并检查请求正文时,文件是一个空对象。它只是一个小的 .docx 文件,所以它的大小应该很好。但我不明白为什么没有正确接收到请求,因为请求没有错误。我的印象是文件可以通过这种方式发送。

我错过了什么吗?

来自角度服务的代码

  sendApplcation(data : any): Observable <any>
  {
    return this.http.post(this.url+ '/careers/api/application', data);
  }

节点代码

router.post("/api/application", (req, res) => {
  const application = req.body;
  console.log(req.body.file);
  let email = {
    to: `${req.body.email}`,
    from: "Careers@TrueLogistics.ca",
    subject: "Application Recieved",
    text: JSON.stringify(req.body),
    html: `<p> ${JSON.stringify(req.body)} </p>`,
  };
  mailer.sendMail(email, (err, res) => {
    if (err) {
      console.log(err);
    }
  });
  email.to = "mjayfalconi@gmail.com";
  mailer.sendMail(email, (err, res) => {
    if (err) {
      console.log(err);
    }
  });

  res.json("Applcation Submitted Successfully!");
});

标签: javascriptnode.jsangular

解决方案


multer在 npm 上查看包。

文件上传的工作方式与正常请求略有不同。

您还将设置enctypemultipart在前端。

此外,我看到您正在使用nodemailer将文件作为附件发送。阅读有关附件的文档。您不会那样发送文件。


//Dependencies 
const multer = require('multer');

 //Multer DiskStorage Config 
const diskStorage = multer.diskStorage(
{ destination: 'assets/profile_upload'} );

 //Create Multer Instance
 const upload = multer({ storage: diskStorage });

 //File upload 
//or app.post()

 router.post('/upload-file', upload.single('file'), (req, res) => { 

//The file 
 console.log(req.file)
;});

//Your code: 
app.post('/upload', (req, res) => { ... try doing app.post('/upload' ,upload.single('file'),

另请查看这篇文章:https ://stackoverflow.com/a/61341352/9662626

抱歉格式不好。我目前只能使用我的手机。


推荐阅读