【发布时间】:2021-06-03 06:34:15
【问题描述】:
我正在使用 cloudinary 在我的项目中上传和存储图像。我正在尝试上传大小为 1mb 的图像,但出现错误“无法解码 base64”。但如果它小于 750kb,则不会出现该错误。有人知道怎么解决吗?
if(req.body.avatar !== '') {
const user = await User.findById(req.user.id);
const image_id = user.avatar.public_id;
const res = await cloudinary.v2.uploader.destroy(image_id)
const result = await cloudinary.v2.uploader.upload(req.body.avatar, {
folder: 'avatars',
width: 300,
crop: "scale"
})
newUserData.avatar = {
public_id: result.public_id,
url: result.secure_url
}
【问题讨论】:
-
req.body.avatar 来自哪里?你确定它是一个有效的 Base64 编码文件吗? Cloudinary 支持以 base64 编码字符串的形式发送最大 60 MB 的文件,因此如果它失败了,可能会有其他原因导致较大的文件在发送到 Cloudinary 的 API 之前被截断或编码不正确
-
@Igy 我能够在我的网络项目中成功上传小于 750kb 的图像,并将上传的图像存储在云中。我不知道为什么每当我上传大于该大小的图像时它会失败
-
@Igy 也 req.body.avatar 来自前端上传的图片。
-
上传小文件到Cloudinary时,req.body.avatar的值和大文件一定会有差异;从您所说的来看,我猜这是数据如何传递到您的后端的方式,但当然可以通过 base64 编码将此类文件上传到 Cloudinary,或者作为文件字节的标准多部分形式上传跨度>
-
@Igy 这是我们前端获取图像时的代码,我不确定问题是否仍然在前端部分
const reader = new FileReader(); reader.onload = () => { if(reader.readyState === 2){ setAvatarPreview(reader.result) setAvatar(reader.result) } } reader.readAsDataURL(e.target.files[0])
标签: javascript node.js mongodb cloudinary