美文网首页
egg后台写本地上传

egg后台写本地上传

作者: 冷r | 来源:发表于2019-09-23 20:58 被阅读0次

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

    相关文章

      网友评论

          本文标题:egg后台写本地上传

          本文链接:https://www.haomeiwen.com/subject/jnfgyctx.html