egg自带ctx.curl文件上传

本文详细介绍如何使用ctx.curl进行文件上传操作,包括单文件和多文件上传,支持String、ReadStream、Buffer等多种格式,同时讲解了配置stream属性实现文件上传的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ctx.curl文件上传

配置files属性

files支持格式: String | ReadStream | Buffer | Array | Object。

单文件上传
ctx.curl(url, {
  method: 'POST',
  files: String | ReadStream | Buffer,
  data: {
    data: 'data',
  },
});

ctx.curl(url, {
  method: 'POST',
  files: filePath,
  data: {
    data: 'data',
  },
});

ctx.curl(url, {
  method: 'POST',
  files: require('fs').createReadStream(filePath),
  data: {
    data: 'data',
  },
});

ctx.curl(url, {
  method: 'POST',
  files: await this.streamToBuffer(require('fs').createReadStream(filePath)),
  data: {
    data: 'data',
  },
});
function streamToBuffer(stream) {  
  return new Promise((resolve, reject) => {
    let buffers = [];
    stream.on('error', reject);
    stream.on('data', (data) => buffers.push(data));
    stream.on('end', () => resolve(Buffer.concat(buffers)));
  });
}
多文件上传

Object多文件上传

ctx.curl(url, {
  method: 'POST',
  files: {
    file1: filePath1,
    file2: require('fs').createReadStream(filePath2),
    file3: await this.streamToBuffer(require('fs').createReadStream(filePath3)),
  },
  data: {
    data: 'data',
  },
});

Array多文件上传

ctx.curl(url, {
  method: 'POST',
  files: [
    filePath1,
    require('fs').createReadStream(filePath2),
    await this.streamToBuffer(require('fs').createReadStream(filePath3)),
  ],
  data: {
    data: 'data',
  },
});

配置stream属性

const FormStream = require('formstream');
const fs = require('fs');
const form = new FormStream();
// form.file表单加载文件
form.file('file1', filePath1, 'fileName1.txt');
// form.stream表单加载stream
form.stream('file2', fs.createReadStream(filePath2), 'fileName2.txt');
// form.field表单加普通的字段
form.field('data', 'test');
const result = await ctx.curl(url, {
  // 必须指定 method,支持 POST,PUT
  method: 'POST',
  // 以 stream 模式提交
  stream: form,
  headers: form.headers(),
  dataType: 'json',
});

/*
formstream还有一种是加载文件的方法是通过buffer的,但是使用起来会有一些问题:
1、与file和stream文件加载方法不能共存;
2、有且只能有一个buffer;
3、file和stream之间可以有多个并且二者可以共存
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值