1.问题描述

小程序项目需要后端接口提供base64流的图片,对于H5的语法,前面拼接后面的代码即可: data:image/png;base64,

先看后台代码:

@RestController
@RequestMapping("/file")
public class FileController { /**
* 图片转为base64流
*/
@GetMapping("/imgToBase64")
public JSONObject imgToBase64() {
JSONObject jsonObject = new JSONObject();
try {
//读取文件
InputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\zhongyushi\\Downloads\\3.jpg"));
byte[] srcBytes = new byte[in.available()];
in.read(srcBytes);
//把字节流转为base64字符流
String encode = new BASE64Encoder().encode(srcBytes);
jsonObject.put("data", encode);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
} /**
* 图片转为字节流
*/
@GetMapping("/imgToByte")
public JSONObject imgToByte() {
JSONObject jsonObject = new JSONObject();
try {
//读取文件
InputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\zhongyushi\\Downloads\\3.jpg"));
byte[] srcBytes = new byte[in.available()];
in.read(srcBytes);
jsonObject.put("data", srcBytes);
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
}

以vue的代码为例说明:

<template>
<img :src="data:imageUrl">
</template>
<script>
export default {
name: '',
created() {
this.getImage()
},
data() {
return {
imageUrl: ''
}
},
methods: {
getImage() {
axios.get('http://localhost:8081/file/imgToBase64').then(res => {
this.imageUrl = 'data:image/png;base64,' + res.data.data
}, err => {
console.log(err)
})
}
},
}
</script>
<style scoped>
</style>

但对于微信小程序却不行,原因是在返回的字符串中,包含了换行符‘\n’,H5可以自动解析并去除,微信小程序却没有这么智能。

2.解决方案

在微信小程序中需要在获取到数据后把换行符替换。

WXML代码:

<view>
<image src="{{imgUrl}}" style="width:100px;height:44px;"></image>
</view>

JAVASCRIPT代码:

Page({
data: {
imgUrl: ''
},
onLoad() {
this.getImg()
},
getImg() {
let that = this
wx.request({
method: 'GET',
url: 'http://localhost:8081/file/imgToBase64',
success(res) {
let data = res.data.data
data = data.replace(/[\r\n]/g, "")
that.setData({
imgUrl: 'data:image/png;base64,' +data
})
}
})
}
})

3.扩展说明

仔细观察会发现,我是后台代码有两种方法,另外一种是直接返回字节流而不是base64流,那么这种方式就不会存在上述的问题,我以另一种组件说明。

JSON代码:

{
"usingComponents": {
"mp-uploader": "weui-miniprogram/uploader/uploader"
}
}

WXML代码:

<view>
<mp-uploader files="{{files}}" max-count="5" title="图片上传" tips="图片上传提示"></mp-uploader>
</view>

JAVASCRIPT代码:

Page({
data: {
files: [],
},
onLoad() {
this.getImg()
},
getImg() {
let that = this
wx.request({
method: 'GET',
url: 'http://localhost:8081/file/imgToBase64',
success(res) {
let arr = []
arr.push({
url: 'data:image/png;base64,' + res.data.data
})
that.setData({
files: arr
})
}
})
}
})

上述使用的是weui的扩展组件:图片上传的组件,使用的是字节流的方式获取图片并显示。

base64图片显示问题的更多相关文章

  1. html img Src base64 图片显示

    http://blog.csdn.net/knxw0001/article/details/10983605 大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: ...

  2. #ZgotmplZ go web 开发 base64 图片显示

    Go Web开发,用Base64作为图片URL时遇到#ZgotmplZ的问题 - 简书 https://www.jianshu.com/p/54fc25da7c4f // var imgBase64 ...

  3. MVC显示Base64图片

    本篇演示ASP.NET MVC应用程序,显示Base64图片. Insus.NET浏览网页,发现一个站点http://www.base64-image.de/ 想起以前也有实现过<如何把数据流转 ...

  4. flutter 显示base64 图片

    后台返回base64 为了本地显示需要转换成Uint8List 1.导入包 import 'dart:convert';2.后台返回base64 格式不被识别需要切分 //'"data:im ...

  5. img src 使用 base64 图片数据

    img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...

  6. Base64 图片转换工具

    以前在写asp的后台的时候,有一个上传功能是必须的,那时候进行的图片预览(未上传前)其实就是获取本地的图片路径来显示图片,但是随着HTML5的出现,可以把图片通过编码来实现预览. 在雅虎的36条速度优 ...

  7. base64图片在各种浏览器的兼容性处理

    IE浏览器目前最高的版本是v11,而微软放弃了IE,转向新的浏览器开发,并取名为Edge.base64图片在IE9及以后的图片均能显示没有问题,而Firefox, Chrome, Safari等非IE ...

  8. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  9. chrome 隐藏技能之 base64 图片转换

    有时候我们要转换图片为base64,或者将base64转回图片,可能都需要找一些在线工具或者软件类型的工具才行.当然 chrome 也算是软件,但是好在做前端的都有 chrome.好了,来看下简单的例 ...

随机推荐

  1. 使用两个FIFO完成流水操作

    一.设计目标 写一个FIFO控制器,控制器里有两个FIFO,输入的数据由串行接收模块(uart_rx_module)送来,一共有86行86列的数据,按0.1.2行,1.2.3行,直到最后83.84.8 ...

  2. 2019牛客暑期多校训练营(第八场)A-All-one Matrices(单调栈+思维)

    >传送门< 题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数 思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非 ...

  3. int和longlong的范围

    unsigned   int     0-4294967295   (10位数,4e9) int                        -2147483648-2147483647  (10位 ...

  4. 1006 How many?

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 36   Accepted: 2 Description 有一天,小Q给了小J ...

  5. C# TCP应用编程一 概述

    TCP 是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP 体系中面向连接的运输层协议,在网络中提供全双工的和可靠的服务.一旦通信双方建立了TCP 连接 ...

  6. kubernetes实战-配置中心(四)分环境使用apollo配置中心

    要进行分环境,需要将现有实验环境进行拆分 portal服务,可以各个环境共用,但是apollo-adminservice和apollo-configservice必须要分开. 1.zk环境拆分为tes ...

  7. 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解

    题意: 有\(n\)根长度不一的棍子,q次询问,求\([L,R]\)区间的棍子所能组成的周长最长的三角形.棍长\(\in [1, 1e9]\),n\(\in [1, 1e5]\). 思路: 由于不构成 ...

  8. 深入理解JavaScript中的箭头

    箭头函数可以使我们的代码更加简洁,如下: var sum = (a,b) => a+b; JavaScript 充满了我们需要编写在其他地方执行的小函数的情况. 例如: arr.forEach( ...

  9. npm publish & 403 Forbidden

    npm publish & 403 Forbidden 403 Forbidden - PUT https://registry.npmjs.org/ https://www.npmjs.co ...

  10. 英语能力考试 All In One

    英语能力考试 All In One 托福,雅思,托业 TOEIC 托业考试 Test of English for International Communication (TOEIC) 国际交流英语 ...