const router = require('koa-router')();const fs = require('fs');
router.post('/upload', async (ctx){ const file = ctx.request.body.files.file; // 獲取上傳文件
const reader = fs.createReadStream(file.path); // 創(chuàng)建可讀流
const ext = file.name.split('.').pop(); // 獲取上傳文件擴(kuò)展名
const upStream = fs.createWriteStream(`upload/${Math.random().toString()}.${ext}`); // 創(chuàng)建可寫流
reader.pipe(upStream); // 可讀流通過管道寫入可寫流
return ctx.body = '上傳成功';
})上面代碼是上傳文件,其中這段不理解:reader.pipe(upStream); // 可讀流通過管道寫入可寫流 return ctx.body = '上傳成功'; //這里直接返回結(jié)果我的疑惑是:stream執(zhí)行完需要一定時間,而且它又是異步的,可以說這里是直接return '上傳成功',我們都知道,return就相當(dāng)于結(jié)束了這次的http請求,那么沒有執(zhí)行完的stream怎么辦?
1 回答

交互式愛情
TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個贊
利用EventEmitter提供的事件
然后你可以把上面的代碼 我這里簡單寫一下 類似這樣封裝一下
function getFile (reader, upStream) { return new Promise(function (resolve, reject) { let stream = reader.pipe(upStream); stream.on('finish', function () { console.log('文件上傳成功!'); }); }); }
- 1 回答
- 0 關(guān)注
- 919 瀏覽
添加回答
舉報
0/150
提交
取消