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); // 創建可讀流
const ext = file.name.split('.').pop(); // 獲取上傳文件擴展名
const upStream = fs.createWriteStream(`upload/${Math.random().toString()}.${ext}`); // 創建可寫流
reader.pipe(upStream); // 可讀流通過管道寫入可寫流
return ctx.body = '上傳成功';
})上面代碼是上傳文件,其中這段不理解:reader.pipe(upStream); // 可讀流通過管道寫入可寫流 return ctx.body = '上傳成功'; //這里直接返回結果我的疑惑是:stream執行完需要一定時間,而且它又是異步的,可以說這里是直接return '上傳成功',我們都知道,return就相當于結束了這次的http請求,那么沒有執行完的stream怎么辦?
1 回答
交互式愛情
TA貢獻1712條經驗 獲得超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 關注
- 935 瀏覽
添加回答
舉報
0/150
提交
取消
