作者
novlan1
2025.9.7
上传图片至COS
express
中使用了 multer 中间件,关键点:
multer
只处理前端multipart/form-data
类型数据req.file
就是文件信息,req.body
就是其他结构化信息- 使用内存,而不是保存文件到本地,避免写入再删除
- COS 上传
Body
参数接受Buffer
,Body
可接受的类型有Buffer | string | Stream
,Stream
就是fs.createReadStream
返回值
js
// 配置 multer
// 这里选择“内存存储”,文件将保存在 Buffer 中,避免写入磁盘再删除的步骤
// 但如果文件非常大,需考虑内存限制,此时可用磁盘存储,并在上传后删除临时文件
const storage = multer.memoryStorage();
const upload = multer({
storage: storage,
// 可选:文件过滤和限制
fileFilter: (req, file, cb) => {
// 例如,只允许图像文件
if (file.mimetype.startsWith('image/')) {
cb(null, true);
} else {
cb(new Error('只允许上传图片文件!'), false);
}
},
limits: {
fileSize: 5 * 1024 * 1024, // 限制文件大小为 5MB
},
});
// 准备上传参数
const params = {
Bucket: process.env.COS_BUCKET, // 格式如 'examplebucket-1250000000'
Region: process.env.COS_REGION, // 地域,如 'ap-beijing'
Key: cosFileName, // 对象键(Key),即文件在 COS 上的完整路径
Body: req.file.buffer, // 从内存存储中获取文件 Buffer
ContentLength: req.file.size,
};
前端使用 history
路由模式,devcloud
中的 nginx
配置如下:
sh
location /next-admin {
try_files $uri $uri/ /next-admin/index.html;
}
# 后台
location /next-cgi/ {
proxy_pass http://localhost:3098/;
}