首页 > 解决方案 > 为什么我的表单数据在 Node.js/Express 中被截断?

问题描述

我正在使用 Node.js/Express 并通过 AJAX 从网页向服务器提交图像。图像已被处理和裁剪,因此我使用生成的 dataURL 并通过这样的发布请求将其发送到我的服务器。dataURL 完全正确且准确,并且包含应有的图像。所以我只是将它发送到服务器。

  var fd = new FormData();
  fd.append('dataURL',dataURL);
  console.log('dataURL length:',dataURL.length);
  $.ajax({
      type: "POST",
      url: `/pwa/update-attachment`,
      data: fd,
      contentType: false,
      processData: false, 
      success: function(result)
      {
      }
    });

在服务器端没有错误,但 dataURL 参数被截断为 1mb。作为参考,我的服务器设置为使用 bodyparser 接受多部分表单数据,如下所示。我尝试使用 bodyParser 的大小限制(高或低),但在这种情况下似乎都没有生效。

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false })); // support encoded bodies

我收到这样的帖子:

 router.post('/update-attachment',(req,res) => {
    console.log('dataurl:',req.body.dataURL.length);
    ...
 });

dataURL 被截断为 1048576 字节。非常适合较小的图像。

标签: node.jsajaxexpressbody-parser

解决方案


没有错误的原因是它在客户端被浏览器截断。要发送图像,不应将其作为 dataURL 发送,而应作为 blob 发送。以下答案解释了这一点:

将数据 URI 转换为文件,然后附加到 FormData


推荐阅读