当前位置: 首页 > 知识库问答 >
问题:

javascript - 解决夸克、QQ、UC浏览器保存base64图片失败问题?

耿志义
2023-12-19

关于夸克、qq、uc等浏览器保存base64图片问题?
使用各品牌手机自带浏览器和chrome保存是没有的。只要使用这些浏览器就会保存失败。

  1. 直接将base64字符串赋值给图片,提醒用户长按保存,默认浏览器保存成功
    uc与夸克点击保存都是没有任何反应
  2. 将base64转为blob,并且使用a标签下载
var arr = response.tempFilePath.split(',');var bytes = atob(arr[1]);let ab = new ArrayBuffer(bytes.length);let ia = new Uint8Array(ab);for (let i = 0; i < bytes.length; i++) {    ia[i] = bytes.charCodeAt(i);}var blob = new Blob([ab], { type: 'application/octet-stream' });var url = URL.createObjectURL(blob);var a = document.createElement('a');a.href = url;a.download = new Date().valueOf() + ".png";var e = document.createEvent('MouseEvents');e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);a.dispatchEvent(e);URL.revokeObjectURL(url);    

夸克、uc、qq都是下载一个.bin结尾的文件,并且会保存失败
9b0ac6cea5f358ec31c09762df266fe.jpg
a29177e894573cb57254b2c1a96e9c0.jpg
d7d2f218857d0de2788fac16a5da95b.jpg

不知道有没有解决办法?

共有2个答案

阎卓
2023-12-19

我之前也遇到一个类似的问题,应用有一个图片剪裁的功能,用户上传图片,发现图片尺寸不对会进行剪裁,剪裁后图片以 base64 的格式输出,之后把图片上传到云存储上。也是在你列举的几个浏览器上上传失败,当时的做法是把剪裁后的图片在一个新的页面上打开,然后让用户保存后重新上传图片。

马丰
2023-12-19

这个问题涉及到浏览器对Base64编码的图片数据和下载的处理方式。根据你提供的信息,使用夸克、QQ、UC浏览器时,直接将Base64字符串赋值给图片并尝试保存会失败,即使转换为Blob对象并通过下载的方式也会出现同样的问题。

以下是几个可能的解决方案,你可以尝试一下:

  1. 检查响应头: 检查服务器的响应头,确保服务器返回的响应头中包含了正确的Content-Type,例如image/pngimage/jpeg。有些浏览器可能会根据响应头的Content-Type来判断如何处理响应的数据。
  2. 使用服务端处理: 在服务器端,将Base64编码的图片数据转换为实际的图片格式(如PNG或JPEG),然后返回给浏览器。这样,浏览器接收到的是真实的图片数据,而不是Base64编码的字符串。
  3. 检查跨域策略: 如果你的Base64图片数据是从其他域获取的,确保目标服务器设置了适当的CORS(跨域资源共享)策略,允许你的网页进行跨域请求和下载。
  4. 检查浏览器插件或扩展: 有时,浏览器插件或扩展可能会干扰正常的下载功能。尝试在无插件或扩展模式下运行浏览器,看看问题是否仍然存在。
  5. 使用其他方法下载: 除了使用Blob对象和a标签下载的方法外,还可以尝试使用JavaScript库或框架提供的下载功能,如Axios等。

需要注意的是,由于不同浏览器的处理方式和限制可能有所不同,因此解决方案可能需要根据具体使用的浏览器进行调整。同时,确保你的代码中没有其他可能导致问题的地方,如跨域问题、网络错误等。

希望这些解决方案能对你有所帮助!如果问题仍然存在或有其他疑问,请随时提问。

 类似资料:
  • 使用图片浏览器,你需要在 sm.js 和 sm.css 之后额外引入如下两个文件: <link rel="stylesheet" href="//g.alicdn.com/msui/sm/0.6.2/css/sm-extend.min.css"> <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm-exte

  • 本文向大家介绍Ajax请求如何解决浏览器缓存问题?相关面试题,主要包含被问及Ajax请求如何解决浏览器缓存问题?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。 在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-C

  • 查了点资料,总结为: 浏览器会解码不同格式的图片为位图 这是正确的吗? 关于加载浏览器不支持的图片格式 使用: Electron 通信协议: grpc 我可以先把获取到的未支持格式图片(比如jxl)用后端服务解码(比如golang)后在返回给浏览器对吗? 浏览器如何使用解码的图片数据? 图片很大的话,如何实现先显示一张完整的预览图,再慢慢变得清晰? 谢谢

  • 我收到一个作为当前href的一部分。它是用base64编码的。我尝试使用对其进行解码,但得到以下错误: 在“window”上执行“atob”失败:要解码的字符串编码不正确 当我在代码中复制并粘贴提取的并转到一个在线解码站点时,它会正确解码。你有什么建议吗?

  • 本文向大家介绍php将图片保存入mysql数据库失败的解决方法,包括了php将图片保存入mysql数据库失败的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php将图片保存入mysql数据库失败的解决方法。分享给大家供大家参考。具体分析如下: 图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但

  • 我写一个油猴脚本想获取验证码的base64,但是获取的不是图一哪个预加载的圈圈,就是图二只有一部分,要怎么获取全部图片啊,如下图 https://demo.eyoucms.com/login.php?s=Admin/login