Multer文件上传错误,请求挂起

2024-04-11

我以前从未写过问题,因为我总是在提问之前在这里找到问题的答案。然而,我在 Express 上的文件上传 POST 路由上的 fileFilter 函数上遇到了困难。我在路由中使用了 multer 上传功能,也作为中间件,后面有一个错误处理中间件,但无法让它按照我的预期运行。

我期望“LIMIT_UNEXPECTED_FILE”错误触发一条闪存消息,然后重定向到选择文件上传的同一页面。这种情况有时会发生,但并不一致。如果在我的测试过程中多次上传尝试连续失败,则第三次或第四次请求将挂起。

我知道 fileFilter 函数正在运行,并输出正确的错误,因为我在 post 路由内的上传函数中有多个 console.logs,并且它输出正确的错误。问题是 req.flash 和 res.redirect 没有被触发。

当我在 post 路由中使用上传函数作为中间件,然后在 post 路由之后使用另一个中间件函数来处理错误时,我还遇到了 res.redirect 未触发的问题。不确定我在这里缺少什么?

index.js


// set upload destination and filename for uploads
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, './public/uploads/');
  },
  filename: (req, file, cb) => {
    const {
      originalname
    } = file;
    cb(null, `${uuid()}-${originalname}`);
  },
});


// filter by file types uploaded
const fileFilter = (req, file, cb) => {
  console.log(file.mimetype);
  if (file.mimetype.split('/')[0] === 'image') {
    cb(null, true);
  } else {
    cb(new multer.MulterError('LIMIT_UNEXPECTED_FILE'), false);
  }
};

const upload = multer({
  storage,
  fileFilter,
  limits: {
    fileSize: 5 * 1024 * 1024
  }
}).single('document');


// Upload route - logged in
router.post('/app/admin/upload', function(req, res) {

  if (req.isAuthenticated()) {
    console.log('testing1');
    upload(req, res, (err) => {
      if (err) {
        console.log(err.code);
        if (err.code === 'LIMIT_FILE_SIZE') {
          req.flash('docError', 'File upload failed due to file size');
          res.redirect('back');
        } else if (err.code === 'LIMIT_FILE_COUNT') {
          req.flash('docError', 'File upload failed due to file count');
          res.redirect('back');
        } else if (err.code === 'LIMIT_UNEXPECTED_FILE') {
          console.log('testing2');
          req.flash('docError', 'File upload failed due to file type');
          res.redirect('back');
        } else {
          console.log(err.code);
          req.flash('docError', 'File upload failed due to unknown error');
          res.redirect('back');
        }
      } else {
        if (!req.file) {
          req.flash('docError', 'No file chosen to upload');
          res.redirect('back');
        } else {
          req.flash('docSuccess', 'File uploaded successfully');
          res.redirect('back');
        }
      }
    });

  } else {
    res.redirect('/');
  }
});

触发上传后路由时服务器控制台输出

[nodemon] restarting due to changes...
[nodemon] starting `node ./bin/www`
listening on port 3000
testing12345
application/x-msdownload
LIMIT_UNEXPECTED_FILE
testing 23456

None

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

Multer文件上传错误,请求挂起 的相关文章

随机推荐

  • 比较 python 中的两个列表并返回匹配值的索引

    对于两个列表 a 和 b 如何获取两者中出现的值的索引 例如 a 1 2 3 4 5 b 9 7 6 5 1 0 return indices of a a b 会回来 0 4 with a 0 a 4 1 5 做到这一点的最好方法是b a
  • 如何将复杂的 django 查询构建为字符串

    我正在动态生成具有多个参数的查询字符串 我试图在字符串中包含对象名称 坚果 果酱 该查询必须是 OR 查询 我的代码如下 我收到如下所示的错误 解决方案here https stackoverflow com questions 18161
  • 覆盖 Hibernate 注解

    我正在开发一个使用 Hibernate 并连接到 Oracle 实例的 Java 应用程序 另一个客户希望使用相同的应用程序 但要求它在 MS SQL Server 上运行 我想避免对现有注释进行更改 而是创建一个 xml 文件包 我们可以
  • 如何从 SharePoint 自定义列表中的日期/时间列获取日期和当前时间

    我在 sharepoint 2007 的自定义列表之一中有一个名为 提交日期 的列作为日期 时间 它总是设置为今天的日期和上午 12 点时间 而不是我想显示今天的日期和当前时间 hh mm ss 我尝试创建计算列 TestDate 公式为
  • 如何从给定缓冲区解码视频? (媒体编解码器)

    我需要解码来自交错流 如 AVI 的数据 所以 这意味着我有一个以这种形状 序列 构建的容器 mp4 gt other data gt mp4 gt other data gt so on 目前我有一个基本的实现MediaCodec解码器
  • 为什么直接导航到该路线时不匹配?

    郑重声明 这是使用当前相当新的 angular router 3 0 0 alpha 8 路线定义位于帖子底部 当尝试在我的应用程序中导航时 行为会有所不同 具体取决于我是直接输入 URL 还是通过链接输入 Works 进入http loc
  • 一个人可以采用敏捷技术吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 目前正在找工作 我看到很多地方都要求敏捷经验 但在我找到使用敏捷的团队的工作之前 我怀疑我永远不会获得这种经验 是否可以仅由一个人采用敏捷方法
  • AttributeError:模块“numpy”没有属性“core”

    我想知道是否有人在运行 Spark 并尝试导入 numpy 时遇到这个问题 Numpy 在标准笔记本中正确导入 但是当我尝试通过运行 Spark 的笔记本导入它时 出现此错误 我有最新版本的 numpy 并且正在运行最新的 anaconda
  • RxJava 中的笛卡尔积

    是否有可能在rxjava中获得两个Observables的笛卡尔积 像这样的事情 A gt 1 2 3 B gt a b A x B gt 1 a 1 b 2 a 2 b 3 a 3 b 你想要的是 对于一个数字 产生与你有字母一样的一对
  • 提交 OSX 应用程序及其捆绑包中的帮助程序应用程序

    我真的要被这个问题搞疯了 我有一个应用程序 其中包含一个简单的帮助程序应用程序 用于管理主应用程序的登录项 当我尝试提交应用程序时 我收到与配置文件和权利相关的错误 我确信问题与助手应用程序有关 因为在我添加它之前 提交工作没有问题 目前
  • PHP获取下拉列表选择选项值

    在我的下拉列表中 每个选项都有两个不同的值 我怎样才能检索两者 让我来说明一下我的意思
  • 从 Html 源在 Excel 中创建注释

    因此 可以从 Html 创建 Excel 文件 我发现很多事情都是可能的 比如添加图像 格式化等 只需一些 css 调整 然而 我现在想做的是让小红色三角形评论显示出来 我创建了一个空白的 Excel 文件 除了注释之外什么都没有 但它生成
  • 在 python 中向量化 for 循环

    我是 python 的新手 有一个关于向量化代码的问题要问 def makeNames2 nList for nLi in nList nLIdx i for i j in enumerate nList if j nLi if nLIdx
  • 如何将 MapView 从像素缩放到米

    我正在制作一个使用 Google Maps API 的 Android 应用程序 我想将 MapView 缩放到 X pixels X meters 例如 我的屏幕中 MapView 的 5 像素 实际距离为 20 米 那可能吗 Thx 使
  • React table v7固定列与react-window

    我有一张带有react table v7 的表 使用react window进行虚拟化 现在表的最后一列已修复 但我无法修复表的最后一列 React window 的内部元素有overflow auto这不会让色谱柱最终变得粘稠 这是lin
  • VisualStateManager WPF 不工作

    我专门在 VS Blend 2017 设计器中设计了一个窗口 没有对 XAML 代码进行任何更改 我创建了一个 StateGroup 和一个 State 并记录了 Button 上的更改 当尝试从代码隐藏应用状态时 没有任何反应 我也看过同
  • 我的基于角色的访问控制是可行的解决方案吗?

    我正在我的 PHP 项目中设计一个非常简单的 RBAC 基于角色的访问控制 系统 经过一番思考后 我想出了一个解决方案 但是对构建业务系统了解不多 我不确定是否有或可能是我的解决方案的任何重大设计缺陷 基本上 我想为用户提供一组 角色 我将
  • 即使关闭 android studio 后,Gradle 仍将 java 作为一个进程

    On mac system whenever i close android studio it leaves java process and java process keep running and keep hogging the
  • MATLAB - 相关属性和计算

    假设我有以下类来计算二次方程的解 classdef MyClass lt handle properties a b c end properties Dependent true x end methods function x get
  • Multer文件上传错误,请求挂起

    我以前从未写过问题 因为我总是在提问之前在这里找到问题的答案 然而 我在 Express 上的文件上传 POST 路由上的 fileFilter 函数上遇到了困难 我在路由中使用了 multer 上传功能 也作为中间件 后面有一个错误处理中