imageHandleService.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use strict';
  2. const fs = require('fs');
  3. // node.js 路径操作对象
  4. const path = require('path');
  5. // 异步二进制 写入流
  6. const awaitWriteStream = require('await-stream-ready').write;
  7. // 管道读入一个虫洞。
  8. const sendToWormhole = require('stream-wormhole');
  9. const Service = require('egg').Service;
  10. class ImageHandleService extends Service {
  11. async upload(filename) {
  12. const ctx = this.ctx;
  13. let stream;
  14. try {
  15. stream = await ctx.getFileStream();// 获取文件
  16. if (!filename) {
  17. // 新建一个文件名 = 文件名 + 时间 + 文件后缀
  18. filename = path.parse(stream.filename).name
  19. + Date.now() + path.extname(stream.filename)
  20. .toLocaleLowerCase();
  21. }
  22. // 文件生成绝对路径
  23. const target = path
  24. .join(this.app.config.defaultUploadPath, filename);
  25. // 生成一个文件写入 文件流
  26. const writeStream = fs.createWriteStream(target);
  27. // 异步把文件流 写入
  28. await awaitWriteStream(stream.pipe(writeStream));
  29. return this.app.config.defaultWritePathPre + filename;
  30. } catch (err) {
  31. ctx.logger.debug(err);
  32. // 如果出现错误,关闭管道
  33. await sendToWormhole(stream);
  34. return null;
  35. }
  36. }
  37. }
  38. module.exports = ImageHandleService;