702 字
4 分钟
自建图床
- 在 CentOS 上设置文件上传服务 首先,确保你的 CentOS 服务器上安装了 Node.js 和 npm,然后你可以安装 Express 和 multer(一个用于处理 multipart/form-data 的中间件)。
# 安装 Node.js(如果还没有安装的话)
sudo yum install -y nodejs
# 安装 Express 和 multer
npm install express multer
然后,你可以创建一个简单的上传服务 server.js 文件:
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}`);
});
- 运行服务器:当然端口要开放。
node server.js
- 这样每次都手动运行麻烦,直接改成随即启动的服务,centos版本设置方法:
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。这样就可以秒同步了。
- 效果图


