fs.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const fs = require('fs');
  2. const path = require('path');
  3. const promisify = require('util').promisify;
  4. const stat = promisify(fs.stat);
  5. class FSStorage {
  6. constructor(config, log) {
  7. this.log = log;
  8. this.dir = config.file_dir;
  9. fs.mkdirSync(this.dir, {
  10. recursive: true
  11. });
  12. }
  13. async length(id) {
  14. const result = await stat(path.join(this.dir, id));
  15. return result.size;
  16. }
  17. getStream(id) {
  18. return fs.createReadStream(path.join(this.dir, id));
  19. }
  20. set(id, file) {
  21. return new Promise((resolve, reject) => {
  22. const filepath = path.join(this.dir, id);
  23. const fstream = fs.createWriteStream(filepath);
  24. file.pipe(fstream);
  25. file.on('error', err => {
  26. fstream.destroy(err);
  27. });
  28. fstream.on('error', err => {
  29. fs.unlinkSync(filepath);
  30. reject(err);
  31. });
  32. fstream.on('finish', resolve);
  33. });
  34. }
  35. del(id) {
  36. return Promise.resolve(fs.unlinkSync(path.join(this.dir, id)));
  37. }
  38. ping() {
  39. return Promise.resolve();
  40. }
  41. }
  42. module.exports = FSStorage;