【问题标题】:How to send pdf file from front-end to Nodejs server?如何将 pdf 文件从前端发送到 Nodejs 服务器?
【发布时间】:2018-09-02 20:51:39
【问题描述】:

我的应用程序前端有一个使用 html2pdf 插件生成的 pdf 文件。我有一个 nodemailer 服务器在我的支持下,我可以在其中附加文件并将其发送到我选择的电子邮件。有没有办法可以将前端生成的 pdf 发送到 Nodejs?我也在用快递

编辑: 根据你的建议,我做了

 **On the Client side**
var element = document.getElementById('element-to-print');
const elem = document.getElementById('html');
html2pdf().from(element).toPdf().get('pdf').then(function (pdf) {
            window.open(pdf.output('bloburl'), '_blank');
            var formData = new FormData();
            formData.append("filename", pdf);
            axios.post('/upload',formData).then(res => { console.log(res) })
            // formData.append("uploadedFile", fileInputElement.files[0]);
            })

在快递应用上

app.post('/upload', fileUpload(), function(req, res) {  
    const sampleFile = req.files.uploadedFile;
    // do something with file
    res.send('File uploaded');
  })

但是我从 index.js 得到这个错误

TypeError: 无法读取 null 的属性“uploadedFile”

【问题讨论】:

    标签: javascript node.js express https


    【解决方案1】:
    <form method="post" enctype="multipart/form-data" action="/">
    <div>
      <label for="profile_pic">Choose file to upload</label>
      <input type="file" id="profile_pic" name="profile_pic"
          accept=".pdf">
    </div>
    <div>
      <button>Submit</button>
    </div>
    

    要在节点接收它,您必须在同一路径定义新路由。

    【讨论】:

      【解决方案2】:

      是的。

      1. 在您的 express 应用中创建和端点/路由
      2. 在您的客户端中使用 http 代理,例如 superagent、request 或 axios
      3. 使用多部分表单或类似 FormData 的东西来创建应该发送的数据。
      4. 将其发布到您在 express 中创建的 url。
      5. 使用 express-fileupload 或 busboy 等中间件来处理附件。

      所以在你的客户端。你有类似的东西

      var formData = new FormData();
      formData.append("filename", "My awesome file");
      formData.append("uploadedFile", fileInputElement.files[0]);
      

      然后你用 Axios 之类的东西发布它

      axios.post('/upload',formData).then(res => { console.log(res) })
      

      在您的快递应用中,您可以执行类似的操作

      const express = require('express');
      const fileUpload = require('express-fileupload');
      const app = express();
      
      app.post('/upload', fileUpload(), function(req, res) {  
        const sampleFile = req.files.uploadedFile;
        // do something with file
        res.send('File uploaded');
      })
      

      【讨论】:

      • 从我的 index.js 中,我收到一个名为 TypeError: Cannot read property 'uploadedFile' of null 的错误,我的快速应用程序代码与您的相同,但我像这样修改了我的客户端 javascript
      • 我用你的解决方案修改了问题
      • @greenn 几个指针 1)您正在调用 req.files.uploadedFile 但您在客户端代码中将其注释掉。从 formData.append("filename", pdf); 更改您的客户端代码to formData.append("uploadedFile", pdf) 2) 既然你已经链接了 promise,请在 axios 前面添加一个 return。所以它会变成 return axios.post 3) 你确定你已经安装了 express-fileupload 吗?请在控制台中运行 npm install express-fileupload --save。
      猜你喜欢
      • 2016-04-04
      • 2018-08-14
      • 2015-10-22
      • 2021-02-15
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多