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)建可寫(xiě)流
reader.pipe(upStream); // 可讀流通過(guò)管道寫(xiě)入可寫(xiě)流
return ctx.body = '上傳成功';
})上面代碼是上傳文件,其中這段不理解:reader.pipe(upStream); // 可讀流通過(guò)管道寫(xiě)入可寫(xiě)流 return ctx.body = '上傳成功'; //這里直接返回結(jié)果我的疑惑是:stream執(zhí)行完需要一定時(shí)間,而且它又是異步的,可以說(shuō)這里是直接return '上傳成功',我們都知道,return就相當(dāng)于結(jié)束了這次的http請(qǐng)求,那么沒(méi)有執(zhí)行完的stream怎么辦?
1 回答

交互式愛(ài)情
TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
利用EventEmitter提供的事件
然后你可以把上面的代碼 我這里簡(jiǎn)單寫(xiě)一下 類似這樣封裝一下
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)注
- 928 瀏覽
添加回答
舉報(bào)
0/150
提交
取消