// 公共文件 'use strict'; const Service = require('egg').Service; const fs = require('fs'); const path = require('path'); class FileService extends Service { // 文件下载 async download({ filePath }) { const target = path.join(filePath); this.ctx.attachment(target); this.ctx.set('Content-Type', 'application/octet-stream'); const msg = fs.createReadStream(target); return msg; } // 文件上传 async upload({ name, stream }) { return new Promise((resolve, reject) => { const target = path.join(`${name}`); const remoteFileStream = fs.createWriteStream(target); stream.pipe(remoteFileStream); let errFlag; remoteFileStream.on('error', err => { errFlag = true; remoteFileStream.destroy(); reject(err); }); remoteFileStream.on('finish', async () => { if (errFlag) return; resolve({ errcode: 0, errmsg: '' }); }); }); } // 文件写入 async write({ filePath, str }) { return new Promise((resolve, reject) => { fs.writeFile(path.resolve(filePath), str, {}, function(err) { if (err) { reject(err); } resolve({ errmsg: '', errcode: 0 }); }); }); } // 文件删除 async filesDel(filePath) { const cafile = path.join(filePath); return new Promise((resolve, reject) => { fs.unlink(cafile, function(err) { if (err) { reject(err); } resolve({ errmsg: '', errcode: 0 }); }); }); } // 文件读取 async fileread(filePath) { return new Promise((resolve, reject) => { fs.readFile(filePath, (err, data) => { if (err) { reject(err); } resolve({ errmsg: '', errcode: 0, data }); }); }); } } module.exports = FileService;