【问题标题】:Could not decode base64 when uploading image (size: 1mb or higher)上传图片时无法解码 base64(大小:1mb 或更高)
【发布时间】: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


【解决方案1】:

我也遇到过同样的问题。只需将 bas64 文件作为 json 而不是作为 formData 发送。 第 1 步:app.use(express.json({ limit: "50mb" })); app.use(express.urlencoded({ limit: "50mb", extended: true }));

第 2 步:由于您在 onChange 事件上转换图像,因此文件被转换为 base64 。所以只需将该数据作为 json 发送。

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2010-10-23
    • 2021-08-06
    • 2014-06-22
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多