【问题标题】:Why is my form data truncated in Node.js/Express?为什么我的表单数据在 Node.js/Express 中被截断?
【发布时间】:2023-04-07 22:45:01
【问题描述】:

我正在使用 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 字节。非常适合较小的图像。

【问题讨论】:

  • 看看documentation
  • 我实际上已经查看了限制参数,但它似乎不适用于这里。这就是为什么我认为还有一些我不知道的事情正在发生。我实际上在其他情况下收到了“实体太大”错误,但是无论我将限制设置为高还是任意低(所以它会失败并且我可以显示参数正在被识别),它似乎没有影响在这里。

标签: node.js ajax express body-parser


【解决方案1】:

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

Convert Data URI to File then append to FormData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多