首页 > 其他分享 >谷歌邮箱无法显示使用 Base64 处理的图片的解决方法

谷歌邮箱无法显示使用 Base64 处理的图片的解决方法

时间:2023-01-30 15:26:29浏览次数:47  
标签:编码 谷歌 base64Code Base64 邮箱 id out

前言

有时候图片会使用 Base64 编码来处理,然后再传到前端 img 标签的 src 属性里展示,这里记录遇到的一个问题,就是使用谷歌邮箱来打开图片,使用了 Base64 编码处理的图片是展示不出来的,不是找不到,是直接 src 属性都会不见了(可以在浏览器上按F12打开控制台查看),经过多次测试发现,谷歌邮箱似乎对 “data:image/jpg;base64,” 这串 Base64 编码处理的编码头有意见,只要带有这个编码头文件,src 属性直接诡异失踪,img 图片不展示。但是使用 Base64 编码处理,要在 src 属性里面展示图片,这个编码头文件又是必须要带入的,不带入依然无法展示图片;而国内大部分邮箱是没有这个问题的,都是可以正常展示的,所以怀疑估计是谷歌邮箱不兼容这种编码方式吧。

解决方法:

后台取到 Base64 编码的文件后,直接在后台处理成流文件,再写给前端浏览器展示,即可避开在谷歌邮箱里面直接读取 Base64 编码不兼容的问题。

代码:

注意:谷歌邮箱要求比较严格,路径必须用 “https” 开头才行,同时本地 localhost 是测试不了的(自己是这种情况,必须部署到公司服务器上才能正常展示),国内的邮箱使用 “http” 或者 “https” 都可以。

前端 <img src="url"/> 中的 url 写法:

<img src="https:xxx.xxx.com/demo/ec/findS4Photo?id=xxxxxxxx"/>

前端请求方法:

 1 @RequestMapping(value = "ec/findS4Photo", method = RequestMethod.GET)
 2 public void findS4Photo(HttpSession session, HttpServletRequest request, HttpServletResponse response) {
 3     log.info("==进来处理图片了==");
 4      
 5     // ec/fs4?id=5b9f6a1b5a83c1377c32b058
 6     try {
 7         String id= request.getParameter("id");
 8          
 9         if (StringUtils.isNotBlank(id)) {
10         
11             //根据id取到Base64编码(自己 Base64 处理的编码存在数据库,所以从数据库中取,自己的存在哪里就从哪里取)           
12             String base64Code = qrcodeService.getQrcodeBase64PhotoById(qrcodeId);
13  
14             try {
15                 response.setContentType("image/*"); // 设置返回的文件类型
16                 OutputStream toClient = response.getOutputStream();
17                 generateImage(base64Code, toClient);// 核心处理方法
18             } catch (Exception ex) {
19                 System.out.println(ex.toString());
20             }
21  
22         }
23     } catch (Exception e) {
24         e.printStackTrace();
25     }
26     log.info("==结束处理图片了==");
27 }

处理方法:

 1 public static boolean generateImage(String base64Code, OutputStream out) {
 2  
 3     // 图像数据为空
 4         if (base64Code == null || "".equals(base64Code)){
 5                 return false;
 6         }
 7     BASE64Decoder decoder = new BASE64Decoder();
 8     try {
 9         // Base64解码
10         byte[] b = decoder.decodeBuffer(base64Code);
11         for (int i = 0; i < b.length; ++i) {
12             if (b[i] < 0) {// 调整异常数据
13                 b[i] += 256;
14             }
15         }
16         // OutputStream out = new FileOutputStream(imgFilePath);
17         out.write(b);
18         out.flush();
19         out.close();
20         return true;
21     } catch (Exception e) {
22         return false;
23     }
24 }

 最后稍微提一下:前端 url 路径由于直接访问后台,可以做一下加密处理,包括传的参数 id 。如果有需要的话。

 

标签:编码,谷歌,base64Code,Base64,邮箱,id,out
From: https://www.cnblogs.com/chch213/p/17076023.html

相关文章

  • 谷歌seo自建博客做外链有用吗?谷歌外链怎么做?
    本文分享利用自建博客来做外链是否对谷歌搜索排名有用本文由光算创作,有可能会被修改或剽窃,我们佛系对待这种行为吧。谷歌seo自建博客做外链有用吗?答案是:100%有效。关于自建......
  • 谷歌云案例|零售商如何提高库存利润率和运营效率?
     【CloudAce--亚洲据点最多的谷歌云合作伙伴,https://cloud-ace.cn/】 零售商在GoogleCloud上运行容器,为什么这很重要?容器(Containers)是现代应用程序的核心。根据......
  • 我为何选择chrome,谷歌浏览器?
    的确,我这里必须说明,我现在已经渐渐不喜欢外国人了。至少目前是这样。我用过不少浏览器。只是我就很好奇,那些浏览器厂商是不是以为我是傻子。我知道,我也许并不是一个很聪明的......
  • 捕获企业邮箱内容后自动处理邮件,自动回复变化内容
    我需要经常回复领导发给我的邮件,邮件有一些特征。我的想法是通过python获取未读邮件,将符合特征的邮件处理一下。处理方式是获取到邮件中的客户名称和id,去另外一个页面查询......
  • 功能测试必备:抓包工具之谷歌开发者工具介绍及使用场景
    大家好啊,我是大田如果想在Web端抓取网络报文,就打开一个浏览器页面,按快捷键F12,点击NetWork,即可看到。一、四个操作:1、小红点代表抓包标志,点击一下变灰,就停止抓包了......
  • 解决谷歌翻译用不了的问题
    关于Google翻译和FCM到底是怎么回事本文来源TG群友投稿截止日前,Google翻译和FCM在中国大陆出现异常,但是出现异常的原因却不同。FCM:FirebaseCloudMessaging,是GoogleCl......
  • 谷歌浏览器启用多线程下载
    谷歌浏览器启用多线程下载功能教程1、双击进入软件,在页面上方地址栏中输入“chrome://flags/#enable-parallel-downloading”并回车访问   2、进入新界......
  • 微信小程序 wx.previewImage()(传入base64数据)
    场景应用微信小程序使用wx.previewImage()浏览图片,但是后台传过来的是base64数据。思路先把base64作为临时文件存到本地,然后预览,预览结束时删除临时文件//获取应用实......
  • React:开发者工具谷歌插件下载安装
    React:开发者工具谷歌插件最近学习前端react主要是想大概浏览一下,这里提供尚硅谷的是视屏资料中的谷歌插件的下载。(如有侵权联系删除)这里提供我的下载地址,其中除了插件,还有......
  • JS二进制:File、Blob、FileReader、ArrayBuffer、Base64
    JavaScript提供了一些API来处理文件或原始文件数据,例如:File、Blob、FileReader、ArrayBuffer、base64等。  Blob全称为binarylargeobject,即二进制大对象,它是......