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之间可以有多个并且二者可以共存
*/