mota-js/_server/fs.js
2020-05-18 11:53:27 +08:00

209 lines
6.5 KiB
JavaScript

(function () {
fs = {};
var _isset = function (val) {
if (val == undefined || val == null || (typeof val=='number' && isNaN(val))) {
return false;
}
return true
}
var _http = function (type, url, formData, success, error, mimeType, responseType) {
var xhr = new XMLHttpRequest();
xhr.open(type, url, true);
if (_isset(mimeType))
xhr.overrideMimeType(mimeType);
if (_isset(responseType))
xhr.responseType = responseType;
xhr.onload = function(e) {
if (xhr.status==200) {
if (_isset(success)) {
success(xhr.response);
}
}
else {
if (_isset(error))
error("HTTP "+xhr.status);
}
};
xhr.onabort = function () {
if (_isset(error))
error("Abort");
}
xhr.ontimeout = function() {
if (_isset(error))
error("Timeout");
}
xhr.onerror = function() {
if (_isset(error))
error("Error on Connection");
}
if (_isset(formData))
xhr.send(formData);
else xhr.send();
}
var postsomething = function (data, _ip, callback) {
if (typeof(data) == typeof([][0]) || data == null) data = JSON.stringify({1: 2});
_http("POST", _ip, data, function (data) {
if (data.slice(0, 6) == 'error:') {
callback(data, null);
}
else {
callback(null, data);
}
}, function (e) {
main.log(e);
callback(e+":请检查启动服务是否处于正常运行状态。");
}, "text/plain; charset=x-user-defined");
}
fs.readFile = function (filename, encoding, callback) {
if (typeof(filename) != typeof(''))
throw 'Type Error in fs.readFile';
if (encoding == 'utf-8') {
//读文本文件
//filename:支持"/"做分隔符
//callback:function(err, data)
//data:字符串
var data = '';
data += 'type=utf8&';
data += 'name=' + filename;
postsomething(data, '/readFile', callback);
return;
}
if (encoding == 'base64') {
//读二进制文件
//filename:支持"/"做分隔符
//callback:function(err, data)
//data:base64字符串
var data = '';
data += 'type=base64&';
data += 'name=' + filename;
postsomething(data, '/readFile', callback);
return;
}
throw 'Type Error in fs.readFile';
}
fs.writeFile = function (filename, datastr, encoding, callback) {
if (typeof(filename) != typeof('') || typeof(datastr) != typeof(''))
throw 'Type Error in fs.writeFile';
if (encoding == 'utf-8') {
//写文本文件
//filename:支持"/"做分隔符
//callback:function(err)
//datastr:字符串
var data = '';
data += 'type=utf8&';
data += 'name=' + filename;
data += '&value=' + datastr;
postsomething(data, '/writeFile', callback);
return;
}
if (encoding == 'base64') {
//写二进制文件
//filename:支持"/"做分隔符
//callback:function(err)
//datastr:base64字符串
var data = '';
data += 'type=base64&';
data += 'name=' + filename;
data += '&value=' + datastr;
postsomething(data, '/writeFile', callback);
return;
}
throw 'Type Error in fs.writeFile';
}
fs.writeMultiFiles = function (filenames, datastrs, callback) {
postsomething('name='+filenames.join(';')+'&value='+datastrs.join(';'), '/writeMultiFiles', callback);
}
fs.readdir = function (path, callback) {
//callback:function(err, data)
//path:支持"/"做分隔符,不以"/"结尾
//data:[filename1,filename2,..] filename是字符串,只包含文件不包含目录
if (typeof(path) != typeof(''))
throw 'Type Error in fs.readdir';
var data = '';
data += 'name=' + path;
postsomething(data, '/listFile', function (err, data) {
try {
data = JSON.parse(data);
} catch (e) {
err = "Invalid /listFile";
data = null;
}
callback(err, data);
});
return;
}
/**
* @param {string} path 支持"/"做分隔符
* @param {() => {err: string, data}} callback
*/
fs.mkdir = function (path, callback) {
//callback:function(err, data)
if (typeof(path) != typeof(''))
throw 'Type Error in fs.readdir';
var data = '';
data += 'name=' + path;
postsomething(data, '/makeDir', function (err, data) {
try {
data = JSON.parse(data);
} catch (e) {
err = "Invalid /makeDir";
data = null;
}
callback(err, data);
});
return;
}
/**
* @param {string} path 支持"/"做分隔符, 不以"/"结尾
* @param {() => {err: string, data}} callback
*/
fs.moveFile = function (src, dest, callback) {
if (typeof(src) != typeof('') || typeof(dest) != typeof(''))
throw 'Type Error in fs.readdir';
var data = '';
data += 'src=' + src + "&dest=" + dest;
postsomething(data, '/moveFile', function (err, data) {
try {
data = JSON.parse(data);
} catch (e) {
err = "Invalid /moveFile";
data = null;
}
callback(err, data);
});
return;
}
/**
* @param {string} path 支持"/"做分隔符, 不以"/"结尾
* @param {() => {err: string, data}} callback
*/
fs.deleteFile = function (path, callback) {
if (typeof(path) != typeof(''))
throw 'Type Error in fs.readdir';
var data = '';
data += 'name=' + path;
postsomething(data, '/deleteFile', function (err, data) {
try {
data = JSON.parse(data);
} catch (e) {
err = "Invalid /deleteFile";
data = null;
}
callback(err, data);
});
return;
}
})();