如何解决 Multer 错误:意外的表单结束?

2023-11-29

我发现了有关 Multer 的其他类似问题,但没有答案。我正在尝试使用 next.js (前端)和 node.js (后端)上传文件。使用开发工具时,数据是通过网络选项卡发布的。

以下是我的设置:

app.js

const express = require('express');
const bodyParser = require('body-parser');

// Get routes
const routeUser = require('./routes/user');

// Create an express server
var app = express();

// Add necessary middleware
app.use(bodyParser.urlencoded({ extended: true })); // Support encoded bodies
app.use(bodyParser.json({
  type: ["application/x-www-form-urlencoded", "application/json"], // Support json encoded bodies
}));

// Custom routes
routeUser(app);

// Start server on port 1234
app.listen(1234, () => {
  console.log("API is running.");
});

路线/用户.js

const multer = require('multer');

module.exports = function(app) {

  const upload = multer({
    storage: multer.diskStorage({
      destination: (req, file, cb) => {
        cb(null, "./user_photos");
      },
      filename: (req, file, cb) => {
        cb(null, file.originalname)
      }
    })
  });

  app.post('/user/update', upload.single('user_photo'), (req, res) => {

    console.log(req.body, req.file);

  });
}

Form

submit(event) {
  event.preventDefault();
  let form_values = new FormData(event.target);
  fetch(this.props.env.api + "/user/update", {
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data; boundary=MyBoundary',
    },
    body: form_values
  }).then((response) => {
    return response.json();
  }).then((response) => {
    console.log(response);
  });
}

------

<form onSubmit={this.submit}>
  <input type="file" name="user_photo"/>
  <button type="submit">Upload</button>
</form>

我已经尝试了几个教程,我正在根据文档进行设置,但我不断收到以下错误:

Error: Unexpected end of form
    at Multipart._final (...\node_modules\busboy\lib\types\multipart.js:588:17)

如果我删除multipart/form-data as Content-Type,表单提交没有问题,但没有文件。我猜这与方式有关formData正在接收对象。


Hey @SReca,今天刚刚遇到这个问题,希望我可以帮助您和其他阅读本文的人。

解决Unexpected end of form

关于最初的问题Unexpected end of form,你删除是正确的Content-Type作为解决方案。这是因为发送FormData()使用常规 Fetch 或 XMLHttpRequest 将自动由浏览器设置标头。浏览器还将附加boundary全部都需要multipart/form-data按顺序请求指示表单何时开始和结束。更多详细信息可以在 MDN 的文档中找到使用 FormData 对象...有关于显式设置的警告Content-Type.

可能修复丢失的文件

现在,关于丢失的文件,它可能对您期望的路径有错误的引用。我没有使用diskStorage,但我用的是常规的dest选择保存我的文件并遇到了同样的问题(想要将图像保存到./assets/images). 对我有用的是提供完整的目录路径。也许将目标属性中的回调函数更改为

// Assuming the the path module is 'required' or 'imported' beforehand
cb(null, path.resolve(__dirname, '<path-to-desired-folder>'));

将解决问题。希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决 Multer 错误:意外的表单结束? 的相关文章

随机推荐

  • android.content.res.Resources$NotFoundException

    Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout screen
  • 将 CodeMirror 添加到自定义元素的 Shadow Dom 中?

    我想在自定义元素内动态创建一个 CodeMirror 实例 并将其存在于元素的 Shadow DOM 内 例如
  • C 循环打印字符串两次? (使用 scanf("%c"))

    很抱歉这个可能很愚蠢的问题 但我想练习一下循环并提出了这个想法 基本上它会要求你进入或不进入循环 当你进入时 它会要求你做一些事情 问题就在我进入循环之后 它会打印两次 printf 字符串 然后传递给 scanf 字符串并等待输入 我想不
  • 来自 C# linq 的 json 父节点中的动态值

    我需要动态设置父节点的值 我正在使用 LINQ 获取数据表中的结果 你能帮忙吗 数据表数据 Key Value filetype Sorry UNDSKYLD Associate
  • 从未收到 GKMatchmaker findMatchForRequest 邀请

    我正在尝试邀请附近的玩家参加比赛 但邀请要么从未发送 要么从未收到 GKMatchMaker startBrowsingForNearbyPlayersWithHandler 可以工作并返回使用同一 wifi 的附近玩家 但随后我使用 fi
  • Neo4J 查询时出现 OutOfMemory 错误

    我最近开始使用 Neo4J 到目前为止我还无法找到我遇到的问题的答案 特别是服务器方面的问题 我使用的是 1 8 1 版本 并将服务器作为 Windows 上的服务运行 而不是嵌入的 我的图表有大约 700 万个节点和近 1100 万个关系
  • 如何从 PHAsset 获取 ALAsset URL?

    您可以使用以下方法偷偷地做 无证的 PHAsset ALAssetURL财产 但我正在寻找有记录的东西 在 Objective C 中 这会有所帮助 interface PHAsset Sneaky property nonatomic r
  • 上传失败:您的免安装应用 APK 应至少包含一个基本 APK

    我需要为即时应用程序准备 Alpha 测试 它在 Android Studio 上运行起来就像一个魅力 但当我尝试将其上传到 PlayStore 时它失败了 说 上传失败 您的免安装应用 APK 应至少包含一个基本 APK 应用程序结构使用
  • 将 UDP 输入传送到 FFMPEG

    摄像机正在本地端口上通过 UDP 以 RTP 形式向我发送视频数据 ffmpeg 是否支持将输入 H 264 有效负载 自动转换为 MP4 怎么做 这应该有效 ffmpeg i udp localhost 1234 vcodec copy
  • 如何在Python中有效地检查给定的IP地址是否属于IP子网?

    我有一组大约 200 000 个 IP 地址和 10 000 个 1 1 1 1 24 形式的子网 对于每个 IP 地址 我需要检查它是否属于这些子网之一 但由于它是一个如此大的数据集 而且我的计算能力较低 我希望对此有一个有效的实现 在搜
  • mysql存储过程从表中设置值

    我有一个简单的表如下 mysql gt select from version id version 1 1 1 row in set 0 00 sec 我需要创建一个存储过程 它将根据该表的值 准确地说 该表的唯一行 执行某些操作 或不执
  • Excel 宏通过 powershell 运行,但在 Windows 任务计划程序运行时不运行

    我有一个脚本检查 Excel 文件的文件夹 然后如果此 阈值 大于 0 则运行另一个 Excel 文件中的宏来与这些 Excel 文件夹交互 当我通过 powershell ISE 手动运行该进程时 它工作正常 但是当我使用 Windows
  • 确定绑定到事件的事件处理程序列表

    我有一个无法关闭的 WinForms 表单 在 OnFormClosing 中 e Cancel 设置为 true 我猜测我的应用程序中的某些对象已绑定到 Closing 或 FormClosing 事件 并且正在阻止关闭 为了找到答案 我
  • 有没有办法在 linq 查询中参数化方法?

    在我使用 Linq to SQL 的应用程序中 用户可以搜索文本 可以在搜索表达式的开头和 或结尾使用星号 现在的代码是这样的 var search SearchTextBox Text Trim bool filterStartsWith
  • 读取串行输入并打印到 Tkinter GUI

    我正在尝试制作一个基于 Tkinter 的 GUI 用于 Arduino 打印传感器值并响应用户输入 我试图用来消除 while 循环的代码是这样的 它不打印任何传感器信息 唯一的输出是 正在尝试 dev ttyACM0 然后打开 tkin
  • 获取 .bat 文件中的图像文件尺寸

    我有一个bat文件 列出了文件夹中所有图像的路径 代码是 echo off break gt infofile txt for f delims F in dir b s bmp do echo F 1 1 1 100 100 gt gt
  • 如何在 nginx 中包含位置块?

    我在用着nginx作为 2 个网络应用程序的反向代理 这两个网络应用程序 UI 共享位置代理 因为后端服务是共享的 如何组合位置块并将它们包含在服务器中 主机配置文件 server server name app1 com listen 8
  • 加密加密属性文件中的密码

    Problem 我正在使用 Apache CXF 3 0 7 并在新功能您可以在加密属性文件中存储密钥库密码的 BASE 64 编码 加密版本 但我不知道如何添加它 我没有找到此实现的示例 在 apache web 中说 加密属性文件内容的
  • 为什么 NULL = NULL 在 SQL Server 中计算结果为 false

    在 SQL Server 中 如果你有nullParam NULL在 where 子句中 它的计算结果始终为 false 这是违反直觉的 给我带来了很多错误 我确实明白IS NULL and IS NOT NULL关键字是正确的方法 但为什
  • 如何解决 Multer 错误:意外的表单结束?

    我发现了有关 Multer 的其他类似问题 但没有答案 我正在尝试使用 next js 前端 和 node js 后端 上传文件 使用开发工具时 数据是通过网络选项卡发布的 以下是我的设置 app js const express requ