'use strict'; const fs = require('fs'); // node.js 路径操作对象 const path = require('path'); // 异步二进制 写入流 const awaitWriteStream = require('await-stream-ready').write; // 管道读入一个虫洞。 const sendToWormhole = require('stream-wormhole'); const Service = require('./baseService'); class TestService extends Service { tag() { return this.ctx.model.testModel; } async upload(filename) { const ctx = this.ctx; let stream; try { stream = await ctx.getFileStream();// 获取文件 if (!filename) { // 新建一个文件名 = 文件名 + 时间 + 文件后缀 filename = path.parse(stream.filename).name + Date.now() + path.extname(stream.filename) .toLocaleLowerCase(); } // 文件生成绝对路径 this.app.config.defaultUploadPath // 放在服务器什么目录下/strong/images/info_admin/ const target = path .join(this.app.config.defaultUploadPath, filename); // 生成一个文件写入 文件流 const writeStream = fs.createWriteStream(target); // 异步把文件流 写入 await awaitWriteStream(stream.pipe(writeStream)); return this.app.config.defaultWritePathPre + filename; } catch (err) { ctx.logger.debug(err); // 如果出现错误,关闭管道 await sendToWormhole(stream); return null; } } } module.exports = TestService;