文章目录
- 服务器部分
- 开启存放文件的端口
- 配置nginx该端口入口
- 手动在/www/wwwroot/file目录下存放一张图片进行访问
- express接口部分
- 代码
- 测试
服务器部分
开启存放文件的端口
我这里以83
为例
先到对应的服务商开启端口,比如我这里是阿里云
测试,比如这里我开启了86端口,但是没有开启87端口,效果如下
配置nginx该端口入口
我这里以宝塔为例
测试,这个时候访问ip+port可以看到如下
如果你使用在服务器手动修改nginx配置文件的话,可以自行百度如何开放端口
手动在/www/wwwroot/file目录下存放一张图片进行访问
比如我有一个资源是/www/wwwroot/file/1718075066607-794279070.png
那么访问ip:port/1718075066607-794279070.png
即可成功访问
express接口部分
代码
我这里是routes和controller分开写的,也可以合并到一起
// routes部分
const express = require("express");
const controller = require("../controllers/upload");
const router = new express.Router();
const multer = require("multer");
const path = require("path");
const fs = require("fs");
// 设置Multer存储引擎
const storage = multer.diskStorage({
destination: (req, file, cb) => {
const uploadPath = path.join("/www/wwwroot/file");
// 检查目标目录是否存在,不存在则创建
if (!fs.existsSync(uploadPath)) {
fs.mkdirSync(uploadPath, { recursive: true });
}
cb(null, uploadPath);
},
filename: (req, file, cb) => {
const uniqueName =
Date.now() +
"-" +
Math.round(Math.random() * 1e9) +
path.extname(file.originalname);
cb(null, uniqueName);
},
});
const upload = multer({ storage: storage });
router.post("/img", upload.single("file"), controller.imgHandler);
module.exports = router;
// controller部分
const configObj = require("../common/config");
const imgHandler = (req, res) => {
const file = req.file;
if (!file) {
return res.fail("上传失败!");
}
// 构造文件URL
const fileUrl = `http://${configObj.host}:83/${file.filename}`;
// 返回文件URL和成功消息
res.success(fileUrl);
};
exports.imgHandler = imgHandler;
// app.js中进行注册
app.use("/upload", uploadRouter);
测试
访问接口ip:port/upload/img
{
"code": 200,
"msg": "success",
"data": "ip:port/1717746235639-944725765.png"
}