随着手机摄像头像素变大,很多图片都超过5兆,所以阿里云默认的nginx最大上传5兆,不够使用了。所以需要重新设置nginx上传图片最大值。修改文件nginx.conf(我们的是/usr/local/nginx/conf/nginx.conf 不同的系统版本文件位置不同)。
在http {
这里增加一行代码:client_max_body_size 50M; # 添加这一行
具体多大自己控制。若要上传视频,需要设置的更大。我见到一个网站一个视频都要800多兆。
配置:
const OSSURL = 'https://test.oss-cn-hangzhou.aliyuncs.com';
const OSS = require('ali-oss');
const ossHZ = new OSS({
region: 'oss-cn-hangzhou',
accessKeyId: FspConstant.ACCESS_KEY_ID,
accessKeySecret: FspConstant.ACCESS_KEY_SECRET,
bucket: 'bucket节点名',
});
核心上传代码很简单:
await ossHZ.putStream(filename, readStream);
上传具体代码:
ImageTool.uploadImage = async function(filename, fileExt, readStream, convertedPath, originalPath) {
try {
await ossHZ.putStream(filename, readStream);
// 删除临时转换文件
if(convertedPath && fs.existsSync(convertedPath)){
fs.unlinkSync(convertedPath);
}
if(fs.existsSync(originalPath)){
fs.unlinkSync(originalPath);
}
return {
code: 200,
data: {
data: {
url: OSSURL + filename,
// src: urlPath,
originalFormat: fileExt
}
}
};
} catch (error) {
// 删除临时转换文件
if(convertedPath && fs.existsSync(convertedPath)){
fs.unlinkSync(convertedPath);
}
if(originalPath && fs.existsSync(originalPath)){
fs.unlinkSync(originalPath);
}
console.error('上传失败:', error);
throw msgCode[39522]('上传');
}
};
调用代码:
// 获取文件扩展名
const fileExt = path.extname(ctx.req.file.originalname).toLowerCase();
let convertedPath = null;
// 支持的格式,直接上传原文件
const readStream = fs.createReadStream(ctx.req.file.path);
let arr = ctx.req.file.path.split('/');
let filename = '/img/' + arr[arr.length - 1];
return ImageTool.uploadImage(filename, fileExt, readStream, null, ctx.req.file.path);