'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('egg').Service; class ImageHandleService extends Service { async upload(filename) { const ctx = this.ctx; const stream = await ctx.getFileStream();// 获取文件 const fileNameT = stream.filename; const fileType = fileNameT.split('.')[fileNameT.split('.').length - 1].toLowerCase(); if (fileType === 'png' || fileType === 'jpg' || fileType === 'jpeg') { if (ctx.request.headers['content-length'] / 1024 < 1024) { // 上传文件大小限制 // let stream; try { if (!filename) { // 新建一个文件名 = 文件名 + 时间 + 文件后缀 filename = path.parse(stream.filename).name + Date.now() + path.extname(stream.filename) .toLocaleLowerCase(); } // TODO 修改成OSS -CH (已完成) // OSS (STS) Bucket await this.ctx.oss.get('bucket1').putStream(this.app.config.defaultWriteAliOSSPath + filename, stream); return this.app.config.defaultWritePathPre + filename; } catch (err) { ctx.logger.debug(err); // 如果出现错误,关闭管道 // await sendToWormhole(stream); return null; } } else { return null; } } else { return null; } } // 上传操作手册,限制只能为docx的格式 async uploadOperationManual(filename) { const ctx = this.ctx; const stream = await ctx.getFileStream();// 获取文件 const fileNameT = stream.filename; const fileType = fileNameT.split('.')[fileNameT.split('.').length - 1]; if (fileType === 'docx') { try { if (!filename) { // 新建一个文件名 = 文件名 + 时间 + 文件后缀 filename = path.parse(stream.filename).name + Date.now() + path.extname(stream.filename) .toLocaleLowerCase(); } // TODO 修改成OSS -CH (已完成) // OSS Bucket await this.ctx.oss.get('bucket1').putStream(this.app.config.operationManualPath + filename, stream); return this.app.config.defaultWriteFilePathPre + filename; } catch (err) { ctx.logger.debug(err); return null; } } else { return null; } } } module.exports = ImageHandleService;