You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js通过API解码Base64图片并保存时文件损坏问题求助

解决Base64图片通过GET请求传入后保存损坏的问题

嘿,我一眼就看出问题出在哪了!当你用GET请求传递Data URI的时候,浏览器会自动对Base64字符串里的特殊字符(比如+、/、=)做URL编码,但你的代码直接拿了编码后的字符串就去处理,结果写入的Base64内容根本不对,图片自然就损坏啦。

问题分析

举个实际的例子:原本Base64里的+会被浏览器转成%2B,/转成%2F,=转成%3D。你直接拆分这个编码后的字符串,得到的是被篡改过的Base64内容,用它生成的文件肯定打不开。

修复方案

只需要在拿到请求参数后,先用decodeURIComponent()把编码后的字符串解码回原始的Base64格式,再进行后续处理就行。另外我还帮你加上了基础的错误处理,避免程序因为异常崩溃,也方便调试问题。

修改后的代码如下:

const express = require('express');
const fs = require('fs');
const app = express();

app.listen(3000, () => {
  console.log('Running on port 3000...');
});

app.get('/api/users', function(req, res) {
  try {
    // 先对请求参数进行URL解码,还原原始Base64内容
    let base64String = decodeURIComponent(req.param('datauri'));
    
    // 提前验证Data URI格式是否正确
    if (!base64String.includes(';base64,')) {
      return res.status(400).send('Invalid Data URI format');
    }
    
    let base64Image = base64String.split(';base64,').pop();
    
    fs.writeFile('image.png', base64Image, {encoding: 'base64'}, function(err) {
      if (err) {
        console.error('Failed to save file:', err);
        return res.status(500).send('Failed to save image');
      }
      console.log('File created successfully');
      res.send('Image saved successfully');
    });
  } catch (err) {
    console.error('Error processing request:', err);
    res.status(400).send('Invalid request data');
  }
});

额外建议

  • GET请求长度限制:如果你的图片比较大,GET请求的URL长度可能会超过浏览器或服务器的限制,导致参数被截断。这种情况下建议改用POST请求,把Data URI放在请求体里传递,会更稳定可靠。
  • 参数校验:最好在处理前多做几层格式校验,比如判断Data URI是否包含正确的前缀(data:image/png;base64,这类),避免因为无效参数导致程序出错。

内容的提问来源于stack exchange,提问作者Rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:42