fileshandler.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // 公共文件
  2. 'use strict';
  3. const Service = require('egg').Service;
  4. const fs = require('fs');
  5. const path = require('path');
  6. class FileService extends Service {
  7. // 文件下载
  8. async download({ filePath }) {
  9. const target = path.join(filePath);
  10. this.ctx.attachment(target);
  11. this.ctx.set('Content-Type', 'application/octet-stream');
  12. const msg = fs.createReadStream(target);
  13. return msg;
  14. }
  15. // 文件上传
  16. async upload({ name, stream }) {
  17. return new Promise((resolve, reject) => {
  18. const target = path.join(`${name}`);
  19. const remoteFileStream = fs.createWriteStream(target);
  20. stream.pipe(remoteFileStream);
  21. let errFlag;
  22. remoteFileStream.on('error', err => {
  23. errFlag = true;
  24. remoteFileStream.destroy();
  25. reject(err);
  26. });
  27. remoteFileStream.on('finish', async () => {
  28. if (errFlag) return;
  29. resolve({ errcode: 0, errmsg: '' });
  30. });
  31. });
  32. }
  33. // 文件写入
  34. async write({ filePath, str }) {
  35. return new Promise((resolve, reject) => {
  36. fs.writeFile(path.resolve(filePath), str, {}, function(err) {
  37. if (err) {
  38. reject(err);
  39. }
  40. resolve({ errmsg: '', errcode: 0 });
  41. });
  42. });
  43. }
  44. // 文件删除
  45. async filesDel(filePath) {
  46. const cafile = path.join(filePath);
  47. return new Promise((resolve, reject) => {
  48. fs.unlink(cafile, function(err) {
  49. if (err) {
  50. reject(err);
  51. }
  52. resolve({ errmsg: '', errcode: 0 });
  53. });
  54. });
  55. }
  56. // 文件读取
  57. async fileread(filePath) {
  58. return new Promise((resolve, reject) => {
  59. fs.readFile(filePath, (err, data) => {
  60. if (err) {
  61. reject(err);
  62. }
  63. resolve({ errmsg: '', errcode: 0, data });
  64. });
  65. });
  66. }
  67. }
  68. module.exports = FileService;