cloudinary文件太大



我使用cloudinary进行图像上传和存储。当我尝试上传一个简单的JPG文件时,它会给我以下错误:

"PayloadTooLargeError: request entity too large"
{
message: 'request entity too large',
expected: 1127957,
length: 1127957,
limit: 102400,
type: 'entity.too.large'
}

以下是我的后端代码:

cloudinary.config({
cloud_name: process.env.CLOUD_NAME,
api_key: process.env.CLOUD_API_KEY,
api_secret: process.env.CLOUD_API_SECRET
})
exports.uploadImage = catchAsync(async(req, res, next) => {
cloudinary.uploader.upload(req.body.img)
.then(async res => {
await User.updateOne({
_id: req.user._id
},{
$push: {
images: {
imgId: res.public_id,
imgVersion: res.version
}
}
})
})
.then(() => res.status(200).json({ msg: 'image uploaded. '}))
})

当我收到这个错误时,我发现它不是来自Cloudinary,而是来自Express,它会阻止特定大小的请求体,除非这个限制被明确设置得更高。你应该(如果你使用的是Express(,能够通过这种方式修复它:

app.use(express.json({
limit: '50mb'
}));

看起来请求正文大于100 MB,这是Cloudinary对上传请求的限制。任何大于此限制的请求都会收到您看到的错误。要上传大于100MB的文件,您必须分块发送请求(请参阅此处的文档(。

您应该使用upload_large方法,而不是使用upload方法,因为它会为您自动拆分文件并将其分为多个部分上传。请参阅-https://github.com/cloudinary/cloudinary_npm/blob/4b0bbccc9bc7c9340b59536e7c73e57c55da2e6f/lib/uploader.js#L54

我想补充一点,Cloudinary不会接受超过10MB的图像文件(免费计划(,也不会接受超过100MB的视频文件(免费规划(。使用upload_large方法并不能解决这个问题,因为源图像/视频必须小于这些限制,以便Cloudinary将其用于任何形式的传输。

最新更新