var multiparty = require('multiparty');
var path = require('path');
var fs = require('fs');
var compressing = require('compressing');
var axios = require('axios');
register_rest_route('nv','package-upload',{
methods: 'post',
callback(data,req,res) {
return new Promise((resolve,reject)=>{
var nowStamp = new Date().getTime();
var uploadDir = `./temp/${nowStamp}`;
nv_create_dirs(uploadDir);
//处理表单的文件
let form = new multiparty.Form({uploadDir});
form.parse(req, (err,fields,files)=>{
if (err) {
console.log('上传套件错误:'+err);
nv_remove_folder(uploadDir);
resolve(new NV_Error('套件上传错误'));
return;
}
if (!files || !files.file || !files.file[0]) {
nv_remove_folder(uploadDir);
resolve(new NV_Error('套件上传失败'));
return;
}
var file = files.file[0];
async_nv_install_package(uploadDir, file)
.then(data=>{
// 返回是对象
resolve(data)
})
.catch(error=>{
// 返回是NV_Error
resolve(error)
})
})
})
},
permission_callback: power=>power >= 10,
});
register_rest_route('nv','get-package-status',{
methods: 'post',
callback(data,req,res) {
return nv_get_package_status(data.package_folder);
},
permission_callback: power=>power >= 10,
})
register_rest_route('nv', 'install-package-from-url',{
methods: 'post',
callback(data,req,res) {
return new Promise((resolve,reject)=>{
var {
url,title
} = data;
url = encodeURI(url);
var fileName = 'temp.zip';
var downloadDir = `./temp/${new Date().getTime()}`;
nv_create_dirs(downloadDir);
// console.log(`从 ${url} 下载文件 ${fileName}`)
axios({
method: "get",
url,
responseType: "stream"
})
.then(function (response) {
var filePath = path.join(downloadDir,fileName);
response.data
.pipe(fs.createWriteStream(filePath))
.on('close',err=>{
if (err) {resolve(new NV_Error('套件下载失败'));return;}
// console.log(`${url}下载成功:${filePath}`)
fs.readFile(filePath,(err,file)=>{
if (err) {resolve(new NV_Error('套件下载成功但读取失败'));return;}
var file = {
path: filePath,
originalFilename: title
}
async_nv_install_package(downloadDir, file)
.then(data=>{
// 返回是对象
resolve(data)
})
.catch(error=>{
// 返回是NV_Error
resolve(error)
})
})
})
})
.catch(error=>{
nv_remove_folder(downloadDir);
resolve(new NV_Error('套件下载失败'))
})
})
},
permission_callback: power=>power >= 10,
})