Merge branch 'master' of https://gitee.com/yu-yon/vue-driven-cloud-storage
This commit is contained in:
@@ -2329,6 +2329,115 @@ app.delete('/api/admin/shares/:id', authMiddleware, adminMiddleware, (req, res)
|
||||
}
|
||||
});
|
||||
|
||||
// ============================================
|
||||
// 管理员:上传工具管理
|
||||
// ============================================
|
||||
|
||||
// 检查上传工具是否存在
|
||||
app.get('/api/admin/check-upload-tool', authMiddleware, adminMiddleware, (req, res) => {
|
||||
try {
|
||||
const toolPath = path.join(__dirname, '..', 'upload-tool', 'dist', '玩玩云上传工具.exe');
|
||||
|
||||
if (fs.existsSync(toolPath)) {
|
||||
const stats = fs.statSync(toolPath);
|
||||
const sizeMB = (stats.size / (1024 * 1024)).toFixed(2);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
exists: true,
|
||||
fileInfo: {
|
||||
path: toolPath,
|
||||
size: stats.size,
|
||||
sizeMB: sizeMB,
|
||||
modifiedAt: stats.mtime
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.json({
|
||||
success: true,
|
||||
exists: false,
|
||||
message: '上传工具不存在'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('检查上传工具失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '检查失败: ' + error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 上传工具文件
|
||||
const uploadToolStorage = multer.diskStorage({
|
||||
destination: (req, file, cb) => {
|
||||
const uploadDir = path.join(__dirname, '..', 'upload-tool', 'dist');
|
||||
// 确保目录存在
|
||||
if (!fs.existsSync(uploadDir)) {
|
||||
fs.mkdirSync(uploadDir, { recursive: true });
|
||||
}
|
||||
cb(null, uploadDir);
|
||||
},
|
||||
filename: (req, file, cb) => {
|
||||
// 固定文件名
|
||||
cb(null, '玩玩云上传工具.exe');
|
||||
}
|
||||
});
|
||||
|
||||
const uploadTool = multer({
|
||||
storage: uploadToolStorage,
|
||||
limits: {
|
||||
fileSize: 100 * 1024 * 1024 // 限制100MB
|
||||
},
|
||||
fileFilter: (req, file, cb) => {
|
||||
// 只允许.exe文件
|
||||
if (!file.originalname.toLowerCase().endsWith('.exe')) {
|
||||
return cb(new Error('只允许上传.exe文件'));
|
||||
}
|
||||
cb(null, true);
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/api/admin/upload-tool', authMiddleware, adminMiddleware, uploadTool.single('file'), (req, res) => {
|
||||
try {
|
||||
if (!req.file) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: '请选择要上传的文件'
|
||||
});
|
||||
}
|
||||
|
||||
const fileSizeMB = (req.file.size / (1024 * 1024)).toFixed(2);
|
||||
|
||||
// 验证文件大小(至少20MB,上传工具通常很大)
|
||||
if (req.file.size < 20 * 1024 * 1024) {
|
||||
// 删除上传的文件
|
||||
fs.unlinkSync(req.file.path);
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: '文件大小异常,上传工具通常大于20MB'
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`[上传工具] 管理员上传成功: ${fileSizeMB}MB`);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '上传工具已上传',
|
||||
fileInfo: {
|
||||
size: req.file.size,
|
||||
sizeMB: fileSizeMB
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('上传工具失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '上传失败: ' + error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 分享页面访问路由
|
||||
app.get("/s/:code", (req, res) => {
|
||||
const shareCode = req.params.code;
|
||||
|
||||
Reference in New Issue
Block a user