yunpan
Version:
yunpan demo
167 lines (133 loc) • 3.49 kB
JavaScript
var fs = require('fs');
function TheFile() {
}
let _fileObj = {
name : '',
type : '',
size : 0
}
let __mySpacePath = '/var/www/html/mySpace/';
//let __mySpacePath ='C:/Users/Administrator/Desktop/toy/mySpace/';
TheFile.prototype = {
init : function ( callback ) {
this.getfiles( __mySpacePath ).then( (list) => {
callback.call({},{files : list , spacePath : __mySpacePath});
});
},
getfiles : function ( dir) {
var promise = new Promise (function( resolve, reject ) {
fs.readdir(dir, function(err,files) {
let fileList = [];
if( !files || files.length == 0) {
resolve(fileList);
return;
}
files.forEach(function( fileName , index ) {
let info = Object.assign({}, _fileObj);
info.name = fileName;
fs.stat(dir+"/"+fileName,function(err,stat){
if( !err ) {
if( stat.isFile() ) {
var nameStr = fileName.split('.');
info.type = nameStr[1];
info.size = stat.size;
} else if( stat.isDirectory() ) {
info.type = 'dir';
}
}
fileList.push( info );
if( fileList.length === files.length ) {
resolve(fileList);
}
});
});
})
});
return promise;
},
del : function( path ) {
let that = this;
return new Promise (( resolve, reject ) => {
try {
var files = [];
if( fs.statSync(path).isDirectory()) {
files = fs.readdirSync(path);
files.forEach(function(file,index){
var curPath = path + "/" + file;
that.del(curPath);
});
fs.rmdirSync(path);
} else {
fs.unlinkSync(path);
}
} catch(err) {
console.error(err);
reject();
}
resolve();
});
},
copy : function( dst , src ) {
let that = this;
return new Promise (( resolve, reject ) => {
try {
if( fs.statSync(src).isDirectory() ) {
if( !fs.existsSync(dst) ) {
fs.mkdirSync(dst);
}
let files = fs.readdirSync(src);
files.forEach(function(path){
var _src=src+'/'+path;
var _dst=dst+'/'+path;
that.copy(_dst,_src);
});
} else {
let readable=fs.createReadStream(src);
let writable=fs.createWriteStream(dst);
readable.pipe(writable);
}
} catch (err) {
reject();
console.error(err)
}
resolve();
})
},
rename : function(oldPath , newPath){
let that = this;
return new Promise (( resolve, reject ) => {
try {
fs.rename(oldPath , newPath,function( err ){
console.log(err);
if(err) {
reject();
} else {
resolve();
}
})
} catch (err) {
reject();
console.error(err)
}
})
},
createFile : function(newPath){
let that = this;
return new Promise (( resolve, reject ) => {
try {
fs.mkdir(newPath,function( err ){
console.log(err);
if(err) {
reject();
} else {
resolve();
}
})
} catch (err) {
reject();
console.error(err)
}
})
}
}
module.exports = new TheFile();