nodejs stream请求

客户端

let file = {path: '文件路径', file: '文件名字'}
const req = http.request({
	host:'localhost',//远端服务器域名
	port:3000,//远端服务器端口号
	method:'POST',
	path:'/upload',//上传服务路径
	headers:{
		'Content-Type':'multipart/form-data',
		'Connection':'keep-alive',
		'file': file.file
	}
}, res => {
	if (res.statusCode < 200 || res.statusCode >= 300) {
		return 'statusCode=' + res.statusCode
	}
	else{
		// 必须触发 data事件, 才能触发 end 事件
		res.on('data', chunk => {
			console.log(chunk)
		});
		res.on('end', (err, res) => {
			console.log(err, res)
		})
	}
})
const fileStream = fs.createReadStream(file.path, { bufferSize: 1024 * 1024 });
fileStream.pipe(req, { end: false });
fileStream.on('end', () => {
	req.end()
});

服务端

router.post('/upload', async (ctx, next) => {
  ctx.body = 'success'
  let buffers = [];
  console.log(ctx.request.headers)
  ctx.req.on('data',(trunk) => {
    buffers.push(trunk);
  }).on('end',async () => {
    const buffer= Buffer.concat(buffers);
    fs.writeFileSync(ctx.request.headers.file, buffer);
    return ctx.res.end();
  }).on('close', () => {
//    res.status(400).json({"err_code":"40000"});
  }).on('error', () => {
//    res.status(400).json({"err_code":"40000"});
  });
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值