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

Node.js实现:将Android Base64编码图片保存为文件

解决Express.js/Node.js解码Android Base64图片并保存的问题

我帮你搞定这个迁移中的图片处理问题!其实不用额外安装base-64这个npm包,Node.js原生的Buffer就能完美处理Android端传来的Base64编码图片,而且能解决你可能遇到的换行符问题——毕竟Android的Base64.DEFAULT会自动插入换行符,这大概率是你之前踩坑的原因。

下面是完整的实现步骤和代码示例:

1. 配置Express中间件,确保能正确解析请求参数

首先要确保Express能解析客户端发送的表单数据(你的Android代码是把图片参数放到params里,应该是用application/x-www-form-urlencoded格式提交的):

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

const app = express();

// 解析x-www-form-urlencoded格式的请求体
app.use(express.urlencoded({ extended: true }));
// 如果客户端是用JSON格式提交,还要加上这个
// app.use(express.json());

2. 编写处理图片上传的路由

在路由里处理image参数,先清理掉Android Base64编码里的换行符,再解码并保存到指定目录:

app.post('/upload-image', (req, res) => {
  try {
    // 1. 获取客户端传来的Base64图片数据
    const base64Image = req.body.image;
    if (!base64Image) {
      return res.status(400).send('图片数据不能为空');
    }

    // 2. 清理Android Base64.DEFAULT带来的换行符
    const cleanedBase64 = base64Image.replace(/\r?\n/g, '');

    // 3. 用Node原生Buffer解码Base64数据
    const imageBuffer = Buffer.from(cleanedBase64, 'base64');

    // 4. 确保保存图片的目录存在,不存在则创建
    const saveDir = path.join(__dirname, 'uploaded-images');
    if (!fs.existsSync(saveDir)) {
      fs.mkdirSync(saveDir, { recursive: true });
    }

    // 5. 生成唯一的文件名(避免覆盖),比如用时间戳+随机数
    const fileName = `${Date.now()}-${Math.random().toString(36).slice(2)}.png`;
    const savePath = path.join(saveDir, fileName);

    // 6. 将Buffer写入文件
    fs.writeFileSync(savePath, imageBuffer);

    res.status(200).send({ message: '图片保存成功', filePath: savePath });
  } catch (error) {
    console.error('处理图片时出错:', error);
    res.status(500).send('图片处理失败');
  }
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`服务器运行在端口${PORT}`);
});

3. 可能的问题排查

  • 客户端请求格式问题:如果你的Android代码是通过JSON格式发送请求,记得在Express里加上app.use(express.json())中间件,并且确保客户端设置了正确的Content-Type: application/json。
  • 权限问题:确保服务器进程有写入uploaded-images目录的权限,Linux/macOS下可以用chmod命令调整权限。
  • Base64数据完整性:如果解码后图片损坏,检查客户端是否完整发送了Base64字符串,有没有被截断的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:02:06