var multiparty = require('multiparty');
var path = require('path');
var fs = require('fs');
const {getDateTime} = require("./method-media.js");
register_rest_route('nv','media-upload',{
methods: 'post',
callback(data,req,res) {
return new Promise((resolve,reject)=>{
var nowStamp = new Date().getTime();
const {year,month} = getDateTime(nowStamp);
var uploadDir = `./nv-content/uploads/${year}/${month}`;
nv_create_dirs(uploadDir);
//处理表单的文件
let form = new multiparty.Form({uploadDir});
form.parse(req,function(err,fields,files){
if (err) {
console.log('上传文件错误:'+err);
resolve(new NV_Error('上传文件错误'))
return;
}
if (!files || !files.file || !files.file[0]) {
//psd可能无法上传
resolve(new NV_Error('文件格式不支持'))
return;
}
var file = files.file[0]; // files.file,名称是创建表单的时候命名的,这里叫file
//文件重命名
try {
var filePath = file.path;
var parsed = path.parse(filePath);
var newPath = path.join(parsed.dir,`/${file.originalFilename.toLowerCase()}`);
if ( !fs.existsSync(newPath) ) {
fs.renameSync(filePath,newPath);
var filename = file.originalFilename.toLowerCase();
} else {
throw new Error('文件已存在,尝试重命名');
}
} catch(e) {
// console.log(e)
var filename = path.parse(file.path).base;
}
//文件写入后,填充数据
var user = get_user_by_nonce(req.headers.nvnonce);
var user_id = user.id || 0;
var title = path.parse(file.originalFilename.toLowerCase()).name || '';
var mediaInfo = {
user_id,
created_time: nowStamp,
content: "",
title,
modified_time: nowStamp,
filename,
};
var media_id = nv_insert_media(mediaInfo);
update_media_meta(media_id,"size",file.size);
resolve( nv_get_media(media_id) )
return;
});
})
},
permission_callback: power=>power >= 6,
});
register_rest_route('nv','media-list',{
methods: 'post',
callback(data,req) {
const {current_page,media_per_page,show_avatar,start_timestamp,end_timestamp} = data;
if ( !current_page || !media_per_page) {
return new NV_Error('参数错误');
}
var filter = r=>{
var result = true;
if (start_timestamp) {
result = result && (r.created_time > start_timestamp);
}
if (end_timestamp) {
result = result && (r.created_time < start_timestamp);
}
return result;
}
return query_media({
filter,
current_page,
media_per_page,
});
},
});
register_rest_route('nv','delete-media',{
methods: 'post',
callback(data,req) {
const {ids} = data;
if ( !ids ) {
return new NV_Error('参数错误');
}
var succeed = [];
ids.forEach(id=>{
var result = nv_delete_media(id);
if (!is_nv_error(result)) {
succeed.push(id)
}
})
return {succeed};
},
permission_callback: power=>power >= 8,
});
register_rest_route('nv','update-media',{
methods: 'post',
callback(data,req) {
const {id,title,content} = data;
if ( !id) {
return new NV_Error('参数错误');
}
nv_update_media(data);
return {id};
},
permission_callback: power=>power >= 8,
});
register_rest_route('nv','change-media-uploader',{
methods: 'post',
callback(data,req) {
const {media,uploader} = data;
var user_id = parseInt(uploader);
if (!media || !user_id) {
return new NV_Error('参数错误');
}
nv_set_media_fields(media,{user_id})
return {};
},
permission_callback: power=>power >= 10,
});