@fjedi/nodejs-file-downloader
Version:
A file downloader for NodeJs
81 lines (66 loc) • 1.93 kB
JavaScript
const path = require("path");
const fs = require("fs");
class FileProcessor {
constructor(config) {
this.originalFileName = config.fileName;
this.fileExtension = path.extname(this.originalFileName);
this.fileNameWithoutExtension = config.fileName
.split(".")
.slice(0, -1)
.join(".");
this.basePath =
config.path[config.path.length - 1] === "/"
? config.path
: config.path + "/";
this.useSynchronousMode = config.useSynchronousMode || false;
}
getAvailableFileName() {
if (this.useSynchronousMode) {
return this.createNewFileNameSync(this.originalFileName);
}
return new Promise(async (resolve) => {
try {
const name = await this.createNewFileName(this.originalFileName);
resolve(name);
} catch (error) {
reject(error);
}
});
}
pathExistsSync(path) {
return fs.existsSync(path);
}
pathExists(path) {
if (this.useSynchronousMode) {
return this.pathExistsSync(path);
}
return new Promise((resolve, reject) => {
fs.access(path, (err) => {
if (err) {
resolve(false);
} else {
resolve(true);
}
});
});
}
createNewFileNameSync(fileName, counter = 1) {
if (!this.pathExistsSync(this.basePath + fileName)) {
return fileName;
}
counter = counter + 1;
let newFileName =
this.fileNameWithoutExtension + "_" + counter + this.fileExtension;
return this.createNewFileNameSync(newFileName, counter);
}
async createNewFileName(fileName, counter = 1) {
if (!(await this.pathExists(this.basePath + fileName))) {
return fileName;
}
counter = counter + 1;
let newFileName =
this.fileNameWithoutExtension + "_" + counter + this.fileExtension;
return await this.createNewFileName(newFileName, counter);
}
}
module.exports = FileProcessor;