file.js 824 Bytes
'use strict';

const fs = require('fs');
const path = require('path');
const Controller = require('egg').Controller;
const awaitWriteStream = require('await-stream-ready').write;
const sendToWormhole = require('stream-wormhole');
const uuid = require('node-uuid');

class FileController extends Controller {

  async upload() {
    const stream = await this.ctx.getFileStream();
    const filename = uuid.v1() + path.extname(stream.filename).toLowerCase();
    const target = path.join(this.config.baseDir, 'app/public', filename);
    const writeStream = fs.createWriteStream(target);
    try {
      await awaitWriteStream(stream.pipe(writeStream));
    } catch (err) {
      await sendToWormhole(stream);
      throw err;
    }

    this.ctx.body = { url: '/public/' + filename };
  }
}

module.exports = FileController;