You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MulterAzureStorage时req.body为空的问题求助

问题排查请求

我们开发了一款应用,通过表单向Azure Blob存储发送信息与文件,采用MulterAzureStorage包实现该功能,同时搭配已验证可用的身份验证中间件。未同时启用二者时,req.body可正常获取包含文件的表单数据;但同时启用后,req.body为空,且文件未存入Blob存储容器。相关代码如下,恳请协助排查:

后端代码

const azureStorage = new MulterAzureStorage({
  connectionString: AZURE_CONNECTION_STRING,
  accessKey: AZURE_ACCESS_KEY,
  accountName: AZURE_STORAGE_ACCOUNT_NAME,
  containerName: CONTAINER_NAME,
  blobName: BLOB_NAME,
});

const upload = multer({
  storage: azureStorage
});

router.post('/verzoek',[auth,upload.any()], async (req, result) => {
   console.log(req.body)
   // 后续代码省略
}

前端请求代码

const request = new FormData();

// 填充request的代码省略

$.ajax({
          async: true,
          method: 'POST',
          url: '/aanvragen/verzoek',
          data: request,
          cache: false,
          processData: false,
          contentType: false,
            
          xhr: function () {
              var xhr = new XMLHttpRequest();
              return xhr;
          }
      }).done(function (result) {
          if (result == "Succes") {
              // 激活相关类
          } else {
              // 提示弹窗
          }
      }).fail(function (xhr, status) {
          // 错误提示
      });

排查方向建议

  • 检查身份验证中间件的请求体处理
    身份验证中间件如果提前读取了请求流(比如使用express.json()或express.urlencoded()解析普通表单),会导致multer无法再读取multipart/form-data类型的请求体。确认auth中间件中没有消费请求流的操作,或者确保这些解析中间件只针对非multipart的请求生效。

  • 修正MulterAzureStorage的Blob名称配置
    配置中blobName设为固定值时,所有上传文件会覆盖同一个Blob,可能造成“未存入”的假象。建议改为动态生成文件名:

    blobName: function(req, file, cb) {
      cb(null, `${Date.now()}-${file.originalname}`);
    }
    

    同时验证Azure存储的连接信息、容器权限是否正确,确认容器存在且有写入权限。

  • 验证中间件执行流程
    暂时将auth中间件替换为空中间件(比如(req, res, next) => next()),测试是否能正常获取req.body和上传文件,以此排除auth中间件的拦截或干扰问题。

  • 确认前端请求的完整性
    在前端发送请求前,检查FormData是否正确添加了所有字段和文件;也可在后端通过调试工具查看请求头(确认Content-Type为multipart/form-data且包含正确的boundary)和请求体是否完整。

内容的提问来源于stack exchange,提问作者Martijn Noordhof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:57:20