egg後臺寫本地上傳

'use strict';

const Controller = require('egg').Controller;
// node.js 文件操作對象
const fs = require('fs');
// node.js 路徑操作對象
const path = require('path');
// egg.js Controller
const awaitStreamReady = require('await-stream-ready').write;
// 管道讀入一個蟲洞。
const sendToWormhole = require('stream-wormhole');

class LoadController extends Controller {
async load() {
const { u_id } = this.ctx.request.headers;
const stream = await this.ctx.getFileStream();
// 上傳基礎目錄
const uplaodBasePath = 'app/public/avater/';
// 生成文件名
const filename = new Date() * 1 + path.extname(stream.filename);
// 判斷文件夾是否存在,不存在則直接創建文件夾
// if (!fs.existsSync()) {
// fs.mkdirSync(path.join(this.config.baseDir, uplaodBasePath));
// }
const target = path.join(this.config.baseDir, uplaodBasePath, filename);
await this.ctx.service.load.load('/public/avater/' + filename, u_id);
// 寫入流
const writeStream = fs.createWriteStream(target);
try {
// 寫入文件
await awaitStreamReady(stream.pipe(writeStream));
} catch (err) {
// 必須將上傳的文件流消費掉,要不然瀏覽器響應會卡死
await sendToWormhole(stream);
throw err;
}
this.ctx.body = {
code: 1,
imgurl: uplaodBasePath + filename,
};
}
async getload() {
const { u_id } = this.ctx.request.query;
const result = await this.ctx.service.load.getload(u_id);
// console.log(result);
this.ctx.body = {
code: 1,
result,
};
}
}

module.exports = LoadController;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章