将 PDF 从 Angular 发送到 .Net Core 服务器?

Send PDF from Angular to .NetCore server?

所以,我使用 jsPDF 创建了一个 PDF,并想将它发送到 .NetCore 服务器。我在前端将文件转换为二进制字符串,然后通过 C# 将其转换回 PDF。当服务调用控制器时,程序挂起,因为它在传递的参数中找不到数据。

这是我的组件

this.eServ.addPDF(this.generatePdf()).subscribe(res => {
        console.log(res);
      });


  generatePdf() : string {
    const doc = new jsPDF();
    doc.text("somestuff", 40,30);
    var binary = doc.output();
    return btoa(binary);
  }

服务

addPDF(pdf: string) {
    console.log(JSON.stringify(pdf))
    return this.http.post('/api/email/upload', pdf, { headers: this.headers });
  }

控制器

[HttpPost]
        public Task<IActionResult> upload(string mailMessage)
        { 
            Console.WriteLine("upload"); 
            var pdfBinary = Convert.FromBase64String(mailMessage); //here's the error 
            using (var fs = new FileStream(fileName, FileMode.Create))
            using (var writer = new BinaryWriter(fs))
            {
                writer.Write(pdfBinary, 0, pdfBinary.Length);
                writer.Close();
            } 
           return null;
        }

错误在控制器中,抱怨mailMessage 为空,因此无法转换。 在前端,二进制文件在发送到控制器时打印出一些正常的东西。 另一个注意事项:路由和其他功能工作正常,“上传”被打印到控制台。

此外,我什至愿意接受其他方式将 PDF 发送到服务器,不一定要坚持二进制方法!

我会说,创建一个 JS 和一个 TS 对象,说电子邮件,并添加一个 属性,说附件,然后发送和接收电子邮件对象。检查您是否可以打印您传递的电子邮件对象。

TypeScript

emailObj: Email = new Email();//put this during class initializations
this.emailObj.attachment = this.generatePDF()
this.eServ.addPDF(this.emailObj).subscribe(res => {
        console.log(res);
      });

所以,服务将是

addPDF(emailObj: Email) {
    return this.http.post<Email>('/api/email/upload', pdf, { headers: this.headers });
  }

控制器

[HttpPost]
        public Task<IActionResult> upload([FromBody] Email eObj)
        { 
    Console.log(eObj.attachment);

}