切换模式
上传文件
上传至本地并访问
接口代码
upload.js
指定上传目录为根目录下uploadFiles文件夹
js
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const { v4: uuidv4 } = require('uuid');
// 配置 multer 的磁盘存储
const storage = multer.diskStorage({
destination: function (req, file, cb) {
// 指定文件存储的目录
const uploadDir = path.join(__dirname, '../../uploadFiles');
// 检查目录是否存在,如果不存在则创建
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
cb(null, uploadDir);
},
filename: function (req, file, cb) {
// 为文件生成唯一的名称
const uniqueSuffix = uuidv4();
cb(null, uniqueSuffix + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage }).single('file');
exports.uploadFile = (req, res, next) => {
upload(req, res, (err) => {
if (err) {
// 处理 multer 抛出的错误
return res.status(400).send({ message: 'Error uploading file: ' + err.message });
}
if (!req.file) {
// 如果没有文件上传,返回错误信息
return res.status(400).send({ message: 'No file uploaded.' });
}
// 文件上传成功的处理
res.json({
code: 200,
message: "上传成功",
data: {
fileUrl: `http://localhost:3000/uploadFiles/${req.file.filename}`,
type: req.file.mimetype,
}
})
});
};
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const { v4: uuidv4 } = require('uuid');
// 配置 multer 的磁盘存储
const storage = multer.diskStorage({
destination: function (req, file, cb) {
// 指定文件存储的目录
const uploadDir = path.join(__dirname, '../../uploadFiles');
// 检查目录是否存在,如果不存在则创建
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
cb(null, uploadDir);
},
filename: function (req, file, cb) {
// 为文件生成唯一的名称
const uniqueSuffix = uuidv4();
cb(null, uniqueSuffix + path.extname(file.originalname));
}
});
const upload = multer({ storage: storage }).single('file');
exports.uploadFile = (req, res, next) => {
upload(req, res, (err) => {
if (err) {
// 处理 multer 抛出的错误
return res.status(400).send({ message: 'Error uploading file: ' + err.message });
}
if (!req.file) {
// 如果没有文件上传,返回错误信息
return res.status(400).send({ message: 'No file uploaded.' });
}
// 文件上传成功的处理
res.json({
code: 200,
message: "上传成功",
data: {
fileUrl: `http://localhost:3000/uploadFiles/${req.file.filename}`,
type: req.file.mimetype,
}
})
});
};
访问路径添加白名单
whiteApi.js
js
const whiteApi = [
'/uploadFiles/*'
]
module.exports = whiteApi
const whiteApi = [
'/uploadFiles/*'
]
module.exports = whiteApi
app.js
更改认证方法 添加 uploadFiles
文件夹指定路径到白名单
js
// 保护所有需要认证的路由
app.use((req, res, next) => {
// 检查请求路径是否在白名单中
const path = req.path;
const isWhitelisted = whiteApi.some(pattern => {
// 如果 pattern 是正则表达式,则使用它来测试 path
const regex = new RegExp(pattern);
return regex.test(path);
});
if (isWhitelisted) {
next(); // 白名单路径,不需要认证,直接调用 next 中间件
} else {
expressjwt({
secret: 'ultraman',
algorithms: ['HS256']
})(req, res, next); // 非白名单路径,进行JWT认证
}
});
app.use('/uploadFiles', express.static('uploadFiles'));
// 保护所有需要认证的路由
app.use((req, res, next) => {
// 检查请求路径是否在白名单中
const path = req.path;
const isWhitelisted = whiteApi.some(pattern => {
// 如果 pattern 是正则表达式,则使用它来测试 path
const regex = new RegExp(pattern);
return regex.test(path);
});
if (isWhitelisted) {
next(); // 白名单路径,不需要认证,直接调用 next 中间件
} else {
expressjwt({
secret: 'ultraman',
algorithms: ['HS256']
})(req, res, next); // 非白名单路径,进行JWT认证
}
});
app.use('/uploadFiles', express.static('uploadFiles'));
上传至腾讯云COS存储
js
const COS = require('cos-nodejs-sdk-v5');
const { v4: uuidv4 } = require('uuid');
const multer = require('multer');
const stream = require('stream');
const path = require('path');
// 配置腾讯云对象存储
const cos = new COS({
SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', // 腾讯云 SecretId
SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', // 腾讯云 SecretKey
});
// 配置 multer 的内存存储
const storage = multer.memoryStorage(); // 使用内存存储而不是磁盘存储
const upload = multer({ storage: storage }).single('file');
exports.cosUploadFile = (req, res) => {
try {
// 使用 multer 中间件处理文件上传
upload(req, res, (err) => {
if (err) {
return res.status(400).json({
code: 400,
message: '文件上传失败: ' + err.message
});
}
if (!req.file) {
return res.status(400).json({
code: 400,
message: '请上传文件'
});
}
const file = req.file;
const fileName = `${uuidv4()}${path.extname(file.originalname)}`;
const fileType = file.mimetype;
// 配置参数
const params = {
Bucket: 'xxxxxxxxxxx', // 腾讯云存储桶名称
Region: 'xxxxxxx', // 腾讯云存储桶地域
Key: fileName, // 文件名
Body: file.buffer, // 直接使用文件缓冲区作为 Body
};
// 上传文件
cos.putObject(params, (err, data) => {
if (err) {
return res.status(500).json({
code: 500,
message: '文件上传到 COS 失败: ' + err.message
});
} else {
return res.status(200).json({
code: 200,
message: '上传成功',
data: {
fileUrl: 'https://'+data.Location,
fileType: fileType
}
});
}
});
});
} catch (error) {
return res.status(500).json({
code: 500,
message: '服务器错误: ' + error.message
});
}
};
const COS = require('cos-nodejs-sdk-v5');
const { v4: uuidv4 } = require('uuid');
const multer = require('multer');
const stream = require('stream');
const path = require('path');
// 配置腾讯云对象存储
const cos = new COS({
SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', // 腾讯云 SecretId
SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxx', // 腾讯云 SecretKey
});
// 配置 multer 的内存存储
const storage = multer.memoryStorage(); // 使用内存存储而不是磁盘存储
const upload = multer({ storage: storage }).single('file');
exports.cosUploadFile = (req, res) => {
try {
// 使用 multer 中间件处理文件上传
upload(req, res, (err) => {
if (err) {
return res.status(400).json({
code: 400,
message: '文件上传失败: ' + err.message
});
}
if (!req.file) {
return res.status(400).json({
code: 400,
message: '请上传文件'
});
}
const file = req.file;
const fileName = `${uuidv4()}${path.extname(file.originalname)}`;
const fileType = file.mimetype;
// 配置参数
const params = {
Bucket: 'xxxxxxxxxxx', // 腾讯云存储桶名称
Region: 'xxxxxxx', // 腾讯云存储桶地域
Key: fileName, // 文件名
Body: file.buffer, // 直接使用文件缓冲区作为 Body
};
// 上传文件
cos.putObject(params, (err, data) => {
if (err) {
return res.status(500).json({
code: 500,
message: '文件上传到 COS 失败: ' + err.message
});
} else {
return res.status(200).json({
code: 200,
message: '上传成功',
data: {
fileUrl: 'https://'+data.Location,
fileType: fileType
}
});
}
});
});
} catch (error) {
return res.status(500).json({
code: 500,
message: '服务器错误: ' + error.message
});
}
};