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

如何在Node.js中使用request()发送multipart/form-data调用外部API传输文件

在Node.js中使用request()发送multipart/form-data文件到Laravel

我来帮你搞定这个文件传输的问题!首先得明确:body-parser并不支持解析multipart/form-data格式的请求,所以你需要先换用专门处理文件上传的中间件,再通过request构造对应的请求转发给Laravel项目。

步骤1:安装必要依赖

先安装multer——这是Node.js生态里处理文件上传最常用的中间件:

npm install multer

步骤2:配置multer接收客户端文件

在你的项目里配置multer,用来解析客户端发来的文件。这里用内存存储示例,你也可以根据需求改成磁盘存储:

const multer = require('multer');
// 内存存储:文件暂存在内存中,适合小文件传输
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

步骤3:改造request调用逻辑

接下来调整你原有的代码,增加multipart请求的处理分支。当客户端上传文件时,用request的formData选项来构造符合要求的请求体:

// 假设你的路由使用multer中间件,接收名为"file"的单个文件字段
app.post('/forward-file', upload.single('file'), (req, res, next) => {
  const options = {
    url: 'https://your-laravel-project-url.com/api/receive-file', // 替换成Laravel的文件接收接口
    method: req.method,
    // 构造multipart/form-data请求体
    formData: {
      // 如果有其他普通表单字段,在这里添加
      username: req.body.username,
      // 传递解析后的文件:req.file是multer生成的文件对象
      file: {
        value: req.file.buffer,
        options: {
          filename: req.file.originalname, // 保留原文件名
          contentType: req.file.mimetype   // 保留原文件类型
        }
      }
    }
  };

  // 保留你原有的request回调逻辑
  request(options, function(error, response, body) {
    if (error || ![constants.response_codes.success, constants.response_codes.internal_server_error, constants.response_codes.error, constants.response_codes.unauthorized].includes(response.statusCode)) {
      return next(true);
    }
    return next(null, { 
      statuscode: response.statusCode, 
      data: response.body 
    });
  });
});

额外注意点

  • 如果需要处理多个文件,把upload.single('file')换成upload.array('files', 5)(最多5个文件),然后在formData里循环添加每个文件即可。
  • Laravel那边接收文件的方式和普通上传一致,比如用$request->file('file')获取文件对象,再调用store()方法存储。
  • 小提醒:request库目前已经处于维护状态,后续如果考虑升级,可以换成axios或者node-fetch,它们处理multipart请求的体验也很好。

内容的提问来源于stack exchange,提问作者Shaju Nr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:24:10