fs.js 1.0 KB

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