微信小程序Base64图片不显示(Base64串存在换行问题)

article/2025/11/8 16:32:20

背景

小程序内用wx.request来发请求,后台返回Base64流,前台用<image>标签显示。

简略代码如下:

File tfile = new File("/Users/sam/Downloads/test.jpg");FileInputStream fileInputStream = new FileInputStream(tfile);byte[] buffer = new byte[fileInputStream.available()];
fileInputStream.read(buffer);
fileInputStream.close();BASE64Encoder base64Encoder = new BASE64Encoder();
String encodedStr = base64Encoder.encode(buffer);
outputStream.write(encodedStr.getBytes());
outputStream.close();

js中:onSubmit: function(e){var that = this;wx.request({url: 'https://127.0.0.1:9800/weapp/qrcode', data: {},method: 'GET',header: {'content-type': 'application/json'},success(res) {that.setData({ ImageBase64Str: 'data:image/png;base64,' + res.data});}})
}wxml中:
<image src='{{ImageBase64Str}}'/>

出现问题

  • 发出POST请求后执行回调后,image里怎么也出不来东西
  • 通过console输出base64串,和第三方工具生成的base64比对,内容是完全一致的
  • 调试工具查看页面源码,标签里的src也注入了,没有多任何的符号
  • 把图片通过在线工具转换成base64标签,直接写到wxml页面里,直接粘贴,发现编辑器报错不认,因为工具生成出来的,有换行,使用nodepad++剔除换行,再次粘贴,发现页面是能够显示的,所以并不存在其他人说的什么不支持base64编码的问题。

如图:


问题解决

既然能够显示,那可能是后台返回的base64串有问题,是不是换行的问题呢?

到后台断点查看数据,果然坑爹:

于是replaceAll过滤换行,再次测试,成功显示:


问题分析

BASE64Encoder产生的base64串带换行的,在小程序里用需要自行替换(网上的在线工具,使用的也是这个工具包啊)


补充阅读

  • 看过其他小伙伴的博客,还有一种方法:
var array = wx.base64ToArrayBuffer(res.data)var base64 = wx.arrayBufferToBase64(array)that.setData({ captchaImage: 'data:image/png;base64,' + base64});

等于是后台不用处理,直接返回base64串,前台先转成ArrayBuffer,再转回base64去,其实是误打误撞去掉了换行达到同样的效果。

 

  • 有同事提醒:如果使用JDK8,也可以用utils包中新的BASE64的编码/解码器,是没有换行的
 Base64.Encoder base64Encoder = Base64.getEncoder();String encodedStr = base64Encoder.encodeToString(buffer);

 


http://chatgpt.dhexx.cn/article/jZO8U3CL.shtml

相关文章

微信公众号图片上传_base64图片上传处理

一、微信公众号图片上传_base64图片上传处理 使用到的接口拍照、选择相册接口&#xff1b; 读取本体图片接口 1.拍照或从手机相册中选图接口 wx.chooseImage({count: 1, // 默认9sizeType: [original, compressed], // 可以指定是原图还是压缩图&#xff0c;默认二者都有sou…

web 全栈

Web 开发技术结构

2019最新Web全栈架构师第九期视频教程全套

如需下载教程&#xff0c;请到原文链接下载 视频好不好&#xff0c;谁看谁知道&#xff0c;话不多说&#xff0c;先看目录&#xff1a; 课件代码软件资料 01课 vue核心API&&组件设计 &#xff08;2019.3.15&#xff09; 02课 Vue-router&Vuex &#xff08;2019.3.…

Web全栈~18.jQuery

Web全栈~18.jQuery 上一期 jQuery是JavaScript的一个函数库,对JavaScript进行了一个封装。jQuery将常用的、复杂的操作进行函数化封装&#xff0c;直接调用&#xff0c;大大降低了使用JavaScript的难度&#xff0c;改变了使用JavaScript的习惯。 jQuery能做的JavaScript也能做…

处女作《Web全栈开发进阶之路》出版了!

书中源码下载地址&#xff1a;https://github.com/qinggee/WebAdvanced 01、 当初决定写博客的原因非常的纯洁&#xff1a;只要每个月写上 4 篇以上博客&#xff0c;月底的绩效奖金就多 500 块。你可能会好奇地问&#xff0c;哪里会有这么好的公司呢&#xff1f;偷偷地告诉你…

小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)

小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第三讲 这是小白都能看懂的实战教程 手把手教你Python Web全栈开发 的第三讲&#xff0c;如果文中有基础知识不太熟悉的话&#xff0c;可以看博主前几期的博客&#xff1a; 本文…

【哈士奇赠书活动 - 18期】-〖Flask Web全栈开发实战〗

文章目录 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》⭐️ 编辑推荐⭐️ 内容提要⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》 内容简介&#xff1a; 《Flask Web全栈开发实战》围绕 Flask 框架&#xff0c;详细地讲解了使用 Flask 开发网站的各项技…

java web全栈漫谈

点击上方“ java工会 ”&#xff0c;选择“置顶公众号” 关注我&#xff0c;查看更多全栈相关技术&#xff01; 原文&#xff1a;https://www.aliyun.com/jiaocheng/1124708.html 一个项目从需求确认到上线,生命周期其实还是挺长的。作为一般公司的话,分工是比较具体的,比如从需…

Web全栈~34.CAS

Web全栈~34.CAS 上一期 原子变量 Java并发包中的原子变量有以下几种 AtomicBoolean&#xff1a;原子Boolean类型&#xff0c;常用来在程序中表示一个标志位。 AtomicInteger&#xff1a;原子Integer类型。 AtomicLong&#xff1a;原子Long类型&#xff0c;常用来在程序中生成…

PythonWeb全栈开发介绍

文章目录 1 什么是Web开发2 Python Web开发技能点3 什么是全栈开发4 技术选型如何开始 1 什么是Web开发 权威定义 Web&#xff08;World Wide Web&#xff09;即全球广域网也称为万维网&#xff0c;它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息…

Web全栈~17.购物车案例(JavaScript动态效果)

Web全栈~17.购物车案例(JavaScript动态效果) 上一期 前言 前三期已经对购物车的样式绘制完毕,那么这一期就用JavaScript来实现动态效果。 全选 思路 可以在input标签里,添加单击事件,并且传递一个this。这个this就会把input本身传递过去。 <li><input type"ch…

java web全栈_web全栈java开发哪个前景好

展开全部 全栈和java哪个能更好62616964757a686964616fe58685e5aeb931333365633862迎合市场需求&#xff0c;有同学咨询学习哪个在以后前景和工作薪水上能更吃香&#xff0c;首先我们先来了解下Java开发和全栈开发的区别。 全栈开发工程师是指掌握多种技能&#xff0c;能够独立…

Web全栈开发基础(小白入门版本)

博客传送门 近几个月认真写了写Web全栈代码&#xff0c;有点小收获这里分享一下。我还做了个PPT&#xff0c;资源路径 欢迎拍砖指点&#xff01; Web全栈开发是一个听起来很虎的名词。本文从技术层面解释全栈开发&#xff0c;能帮助没有全栈概念&#xff0c;或者说对相关技术…

web全栈开发项目搭建整体思路和学习路线

web全栈开发 全栈开发技术介绍&#xff1a; 全栈技术指可以完整整个项目搭建的有效集合。 包括&#xff1a;网站的设计&#xff0c;web前端开发&#xff0c;web后端开发&#xff0c;数据库设计&#xff0c;接口和组件&#xff0c;移动端开发&#xff0c;产品设计&#xff0c;系…

mysql建立索引的几大原则

1&#xff0e;选择唯一性索引 唯一性索引的值是唯一的&#xff0c;可以更快速的通过该索引来确定某条记录。例如&#xff0c;学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话&#xff0c;可能存在同名现象&#xff0c…

MySQL建立索引的正确姿势与使用索引的最佳指南!

引言 数据库索引&#xff0c;绝对是MySQL的核心功能之一&#xff0c;如果没有索引机制的数据库&#xff0c;那数据的检索效率绝对是令人无法接受的&#xff0c;毕竟没有索引的表数据&#xff0c;就如同一个普通的文本文件存储在磁盘中。在《索引上篇》中&#xff0c;我们对于M…

mysql创建索引语句

1:表结构 2:创建索引语句 alter table staffs add index idx_staffs_nameAgePos(NAME,age,pos); 执行后效果

MySQL建立索引的注意事项

大家都知道对数据库表字段建立索引可以有效的提升数据的查询效率&#xff0c;但索引也不是随便建立的&#xff0c;需要我们对建立索引的规范有一定的了解&#xff0c;才能更好的发挥出索引的优势&#xff0c;避免因为滥建索引反而带来整体性能的下降。 1、哪些列上建立索引&am…

MySQL之创建索引

文章目录 MySQL之创建索引1.五种索引分类2.创建表后创建索引命令(create)3.创建表后创建索引命令(alter)3.1单列主键索引3.2单列唯一索引3.3组合唯一索引3.4单列普通索引3.5组合普通索引3.6单列全文索引 4.创建表时创建索引命令(create)4.1单列主键索引(不起名)4.2组合普通索引…

MySQL几种创建索引的方式

一、创建表时创建索引 key 索引名 &#xff08;column&#xff09;&#xff1b; 二、表创建好后创建索引 1、通过Alter创建索引 ①PRIMARY KEY&#xff08;主键索引&#xff09; mysql > ALTER TABLE table_name ADD PRIMARY KEY ( column ) ②UNIQUE(唯…