1. 在 CentOS 上设置文件上传服务 首先,确保你的 CentOS 服务器上安装了 Node.js 和 npm,然后你可以安装 Express 和 multer(一个用于处理 multipart/form-data 的中间件)。
1
2
3
4
5
# 安装 Node.js(如果还没有安装的话)
sudo yum install -y nodejs

# 安装 Express 和 multer
npm install express multer

然后,你可以创建一个简单的上传服务 server.js 文件:

 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}`);
});
  • 运行服务器:当然端口要开放。
1
node server.js
  • 这样每次都手动运行麻烦,直接改成随即启动的服务,centos版本设置方法:
 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
1.创建服务文件:
sudo nano /etc/systemd/system/image-uploader.service
2.编写服务文件内容:
[Unit]
Description=Image Uploader Service
After=network.target

[Service]
Type=simple
User=your_user #root可以不设置这一行
WorkingDirectory=/opt/made
ExecStart=/usr/bin/node /opt/made/server.js
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
3.重新加载systemd配置
sudo systemctl daemon-reload
4.启动服务:
sudo systemctl start image-uploader
5.设置服务开机启动:
sudo systemctl enable image-uploader
6检查服务状态:
sudo systemctl status image-uploader

然后前端改改就差不多了

如果前端页面js出现缓存一直难于清除,除了浏览器上操作强制刷新,F12后台进行勾选不缓存之外,还有一个情况要考虑,就是如果你是cf代理了,那就新建页面规则进行特定域名设置cache level bypass。这样就可以秒同步了。

  • 效果图

images