egg后台写本地上传

2019-09-23  本文已影响0人  冷r

'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;

上一篇下一篇

猜你喜欢

热点阅读