1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| const express = require('express');
const multer = require('multer');
const path = require('path');
const cors = require('cors');
const app = express();
const PORT = 3000;
// 使用 CORS 允许跨域请求
app.use(cors({
origin: '', // 允许的来源(你的前端地址)
methods: ['GET', 'POST'], // 允许的请求方法
allowedHeaders: ['Content-Type', 'Authorization'] // 允许的请求头
}));
// 设置文件存储配置
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/'); // 保存上传文件的目录
},
filename: (req, file, cb) => {
// 生成带时间戳的文件名
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
const extension = path.extname(file.originalname);
cb(null, uniqueSuffix + extension);
}
});
const upload = multer({ storage: storage });
// 用户名和密码 (你可以在这里定义自己的用户名和密码)
const USERNAME = '';
const PASSWORD = '';
// 简单的授权中间件
const authenticate = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) {
return res.status(401).json({ message: '未授权:缺少授权头' });
}
// 检查用户名和密码
const [username, password] = Buffer.from(authHeader.split(' ')[1], 'base64').toString().split(':');
if (username === USERNAME && password === PASSWORD) {
next(); // 验证成功,继续处理
} else {
res.status(403).json({ message: '用户名或密码错误' });
}
};
// 上传文件路由,使用授权中间件
app.post('/upload', authenticate, upload.array('files'), (req, res) => {
if (!req.files || req.files.length === 0) {
return res.status(400).json({ message: '没有文件被上传' });
}
try {
const files = req.files.map(file => {
return { path: `/uploads/${file.filename}` }; // 使用带时间戳的文件名
});
res.status(200).json({ files });
} catch (error) {
console.error('文件上传失败:', error);
res.status(500).json({ message: '服务器内部错误' });
}
});
// 提供静态文件服务
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));
app.listen(PORT, () => {
console.log(`服务器已启动,监听端口 ${PORT}`);
});
|