235 lines
8.8 KiB
JavaScript
235 lines
8.8 KiB
JavaScript
const express = require('express');
|
||
const router = express.Router();
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
const tool = require('../utility/tool');
|
||
const multer = require('multer');
|
||
const shortid = require('shortid');
|
||
|
||
// 图片上传配置
|
||
const storageImg = multer.diskStorage({
|
||
destination(req, file, cb) {
|
||
if (req.query.uniqueId) {
|
||
let dirPathParent = path.join(__dirname, '../public/uploads/', req.query.uniqueId),
|
||
dirPath = path.join(dirPathParent, 'img'); // 不能直接创建dirPath,因为父目录不存在会抛出异常
|
||
fs.mkdir(dirPathParent, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
cb(err);
|
||
} else {
|
||
fs.mkdir(dirPath, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
cb(err);
|
||
} else {
|
||
cb(null, dirPath);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
cb(new Error('参数uniqueId不存在!'));
|
||
}
|
||
},
|
||
filename(req, file, cb) {
|
||
const fileName = `${file.originalname.substring(0, file.originalname.lastIndexOf('.'))}_${shortid.generate()}`;
|
||
const ext = file.originalname.substr(file.originalname.lastIndexOf('.'));
|
||
const fullName = fileName + ext;
|
||
cb(null, fullName);
|
||
}
|
||
});
|
||
|
||
// 附件上传配置
|
||
const storageFile = multer.diskStorage({
|
||
destination(req, file, cb) {
|
||
if (req.query.uniqueId) {
|
||
let dirPathParent = path.join(__dirname, '../public/uploads/', req.query.uniqueId),
|
||
dirPath = path.join(dirPathParent, 'file');
|
||
fs.mkdir(dirPathParent, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
cb(err);
|
||
} else {
|
||
fs.mkdir(dirPath, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
cb(err);
|
||
} else {
|
||
cb(null, dirPath);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
cb(new Error('参数uniqueId不存在!'));
|
||
}
|
||
},
|
||
filename(req, file, cb) {
|
||
const fileName = `${file.originalname.substring(0, file.originalname.lastIndexOf('.'))}_${shortid.generate()}`;
|
||
const ext = file.originalname.substr(file.originalname.lastIndexOf('.'));
|
||
const fullName = fileName + ext;
|
||
cb(null, fullName);
|
||
}
|
||
});
|
||
|
||
router.get('/', (req, res, next) => {
|
||
const list = [];
|
||
let total = 0;
|
||
const rootPath = path.join(__dirname, '../public/uploads/');
|
||
let rootFiles;
|
||
let parFiles;
|
||
let files;
|
||
let stat;
|
||
switch (req.query.action) {
|
||
// 获取配置
|
||
case 'config':
|
||
tool.getConfig(path.join(__dirname, '../config/ue.json')).then(settings => {
|
||
res.json(settings);
|
||
}, err => {
|
||
next(err);
|
||
});
|
||
break;
|
||
|
||
// 图片管理
|
||
case 'listimage':
|
||
rootFiles = fs.readdirSync(rootPath);
|
||
rootFiles.forEach(rootFile => {
|
||
stat = fs.statSync(path.join(rootPath, rootFile));
|
||
if (stat.isDirectory()) {
|
||
parFiles = fs.readdirSync(path.join(rootPath, rootFile));
|
||
parFiles.forEach(parFile => {
|
||
if (parFile === 'img') {
|
||
files = fs.readdirSync(path.join(rootPath, rootFile, 'img'));
|
||
total += files.length;
|
||
files.forEach(imgFile => {
|
||
list.push({
|
||
url: `/uploads/${rootFile}/img/${imgFile}`
|
||
});
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
res.json({
|
||
state: total === 0 ? 'no match file' : 'SUCCESS',
|
||
list,
|
||
total,
|
||
start: parseInt(req.query.start),
|
||
size: parseInt(req.query.size)
|
||
});
|
||
break;
|
||
|
||
// 附件管理
|
||
case 'listfile':
|
||
rootFiles = fs.readdirSync(rootPath);
|
||
rootFiles.forEach(rootFile => {
|
||
stat = fs.statSync(path.join(rootPath, rootFile));
|
||
if (stat.isDirectory()) {
|
||
parFiles = fs.readdirSync(path.join(rootPath, rootFile));
|
||
parFiles.forEach(parFile => {
|
||
if (parFile === 'file') {
|
||
files = fs.readdirSync(path.join(rootPath, rootFile, parFile));
|
||
total += files.length;
|
||
files.forEach(attachFile => {
|
||
list.push({
|
||
url: `/uploads/${rootFile}/file/${attachFile}`
|
||
});
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
res.json({
|
||
state: total === 0 ? 'no match file' : 'SUCCESS',
|
||
list,
|
||
total,
|
||
start: parseInt(req.query.start),
|
||
size: parseInt(req.query.size)
|
||
});
|
||
break;
|
||
}
|
||
});
|
||
|
||
router.post('/', (req, res, next) => {
|
||
let uploadFile;
|
||
switch (req.query.action) {
|
||
// 上传图片
|
||
case 'uploadimage':
|
||
uploadFile = multer({ storage: storageImg })
|
||
.single('upfile');
|
||
uploadFile(req, res, err => {
|
||
if (err) {
|
||
next(err);
|
||
} else {
|
||
res.json({
|
||
state: 'SUCCESS',
|
||
url: `/uploads/${req.query.uniqueId}/img/${req.file.filename}`, // 此处不能用path.join,因为path会使用'\'分隔符,而url地址必须是'/'分隔符
|
||
title: req.file.originalname,
|
||
original: req.file.originalname,
|
||
error: null
|
||
});
|
||
}
|
||
});
|
||
break;
|
||
|
||
// 上传涂鸦
|
||
case 'uploadscrawl':
|
||
var dataBuffer = new Buffer(req.body.upfile, 'base64'),
|
||
fileName = `${shortid.generate()}.png`;
|
||
if (req.query.uniqueId) {
|
||
// 不能直接创建dirPath,因为父目录不存在会抛出异常
|
||
const dirPathParent = path.join(__dirname, '../public/uploads/', req.query.uniqueId);
|
||
const dirPath = path.join(dirPathParent, 'img');
|
||
fs.mkdir(dirPathParent, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
next(err);
|
||
} else {
|
||
fs.mkdir(dirPath, err => {
|
||
if (err && err.code !== 'EEXIST') {
|
||
next(err);
|
||
} else {
|
||
fs.writeFile(path.join(dirPath, fileName), dataBuffer, err => {
|
||
if (err) {
|
||
next(err);
|
||
} else {
|
||
res.json({
|
||
state: 'SUCCESS',
|
||
|
||
// 此处不能用path.join,因为path会使用'\'分隔符,而url地址必须是'/'分隔符
|
||
url: `/uploads/${req.query.uniqueId}/img/${fileName}`,
|
||
title: fileName,
|
||
original: fileName,
|
||
error: null
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
next(new Error('参数uniqueId不存在!'));
|
||
}
|
||
break;
|
||
|
||
// 上传附件
|
||
case 'uploadfile':
|
||
uploadFile = multer({ storage: storageFile })
|
||
.single('upfile');
|
||
uploadFile(req, res, err => {
|
||
if (err) {
|
||
next(err);
|
||
} else {
|
||
res.json({
|
||
state: 'SUCCESS',
|
||
|
||
// 此处不能用path.join,因为path会使用'\'分隔符,而url地址必须是'/'分隔符
|
||
url: `/uploads/${req.query.uniqueId}/file/${req.file.filename}`,
|
||
title: req.file.originalname,
|
||
original: req.file.originalname,
|
||
error: null
|
||
});
|
||
}
|
||
});
|
||
break;
|
||
}
|
||
});
|
||
|
||
module.exports = router;
|