163 lines
4.3 KiB
JavaScript
163 lines
4.3 KiB
JavaScript
|
/*
|
|||
|
*
|
|||
|
* (c) Copyright Ascensio System Limited 2010-2021
|
|||
|
*
|
|||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|||
|
* you may not use this file except in compliance with the License.
|
|||
|
* You may obtain a copy of the License at
|
|||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
|
* Unless required by applicable law or agreed to in writing, software
|
|||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
|
* See the License for the specific language governing permissions and
|
|||
|
* limitations under the License.
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
"use strict";
|
|||
|
|
|||
|
const fs = require('fs'),
|
|||
|
path = require('path'),
|
|||
|
co = require("co"),
|
|||
|
request = require("request");
|
|||
|
|
|||
|
const config = require('../config');
|
|||
|
const appDataDirPath = path.join(__dirname, config.get("web:data"));
|
|||
|
|
|||
|
function getDataDirPath(subdir = "", createIfNotExist = true) {
|
|||
|
var fullPath = path.join(appDataDirPath, subdir);
|
|||
|
if (!createIfNotExist) return fullPath;
|
|||
|
|
|||
|
return co(function* () {
|
|||
|
yield createDir(appDataDirPath);
|
|||
|
return createDir(fullPath);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function createDir(pathToDir) {
|
|||
|
return co(function* () {
|
|||
|
const exist = yield checkDirExist(pathToDir);
|
|||
|
if (exist) {
|
|||
|
return pathToDir;
|
|||
|
}
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
fs.mkdir(pathToDir,
|
|||
|
(err) => {
|
|||
|
if (err) {
|
|||
|
reject(err);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
resolve(pathToDir);
|
|||
|
});
|
|||
|
});
|
|||
|
}).catch((err) => {
|
|||
|
log.error("Create App_Data error", err);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function checkDirExist(pathToDir) {
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
fs.stat(pathToDir,
|
|||
|
function (err, stats) {
|
|||
|
if (err) {
|
|||
|
if (err.code === 'ENOENT') {
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
reject(err);
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
resolve(stats.isDirectory());
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function checkFileExist(pathToFile) {
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
fs.stat(pathToFile,
|
|||
|
function (err, stats) {
|
|||
|
if (err) {
|
|||
|
if (err.code === 'ENOENT') {
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
reject(err);
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
resolve(stats.isFile());
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function copyFile(source, target, append = false) {
|
|||
|
return new Promise(function (resolve, reject) {
|
|||
|
var rd = fs.createReadStream(source);
|
|||
|
rd.on('error', rejectCleanup);
|
|||
|
|
|||
|
const writeOptions = { flags: append ? 'a' : 'w' };
|
|||
|
|
|||
|
var wr = fs.createWriteStream(target, writeOptions);
|
|||
|
wr.on('error', rejectCleanup);
|
|||
|
|
|||
|
function rejectCleanup(err) {
|
|||
|
rd.destroy();
|
|||
|
wr.end();
|
|||
|
reject(err);
|
|||
|
}
|
|||
|
wr.on('finish', resolve);
|
|||
|
rd.pipe(wr);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function moveFile(from, to) {
|
|||
|
return co(function* () {
|
|||
|
const isExist = yield checkFileExist(from);
|
|||
|
if (!isExist) return;
|
|||
|
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
fs.rename(from, to, () => { resolve(); });
|
|||
|
});
|
|||
|
})
|
|||
|
.catch((error) => {
|
|||
|
throw error;
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function deleteFile(pathToFile) {
|
|||
|
return co(function* () {
|
|||
|
const isExist = yield checkFileExist(pathToFile);
|
|||
|
if (!isExist) return;
|
|||
|
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
fs.unlink(pathToFile, () => { resolve(); });
|
|||
|
});
|
|||
|
})
|
|||
|
.catch((error) => {
|
|||
|
throw error;
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function downloadFile(uri, filePath) {
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
const data = request
|
|||
|
.get(uri, { rejectUnauthorized: false })
|
|||
|
.on('error', (err) => {
|
|||
|
reject(err);
|
|||
|
})
|
|||
|
.pipe(fs.createWriteStream(filePath))
|
|||
|
.on('error', (err) => {
|
|||
|
reject(err);
|
|||
|
})
|
|||
|
.on('finish', () => {
|
|||
|
resolve(filePath);
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
module.exports = { checkFileExist, createDir, copyFile, moveFile, deleteFile, getDataDirPath, downloadFile };
|
|||
|
|