123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- const fss = require('fs');
- const fs = fss.promises;
- const path = require('path');
- const mkdirp = require('mkdirp');
- class FSStorage {
- constructor(config, log) {
- this.log = log;
- this.dir = config.file_dir;
- mkdirp.sync(this.dir);
- }
- async length(id) {
- const result = await fs.stat(path.join(this.dir, id));
- return result.size;
- }
- getStream(id) {
- return fss.createReadStream(path.join(this.dir, id));
- }
- set(id, file) {
- return new Promise((resolve, reject) => {
- const filepath = path.join(this.dir, id);
- const fstream = fss.createWriteStream(filepath);
- file.pipe(fstream);
- file.on('error', err => {
- fstream.destroy(err);
- });
- fstream.on('error', err => {
- this.del(id);
- reject(err);
- });
- fstream.on('finish', resolve);
- });
- }
- async del(id) {
- try {
- await fs.unlink(path.join(this.dir, id));
- } catch (e) {
- // ignore local fs issues
- }
- }
- ping() {
- return Promise.resolve();
- }
- }
- module.exports = FSStorage;
|