赞
踩
本人做后台开发,公司有个需求把一个下载链接生产二维码在小程序端显示,提供用户保存。由于这下载链接会随时变化,我不想把二维码保存到服务器,再用资源访问的方式去浏览,所有我直接把二维码以流的形式输出,在服务器不作保存,懒得再写个定时器去定时删除过期二维码。
然而懒惰总要付出代价的,公司前端告诉我:二维码无法正常保存!
然后我做了测试,在小程序里通过img标签是完全可以显示二维码的,iphone上也可以完美保存二维码,但在安卓机上显示二维码保存失败,报错信息saveImageToPhotosAlbum:fail invalid file type。然后打印wx.getImageInfo()的返回值,path后缀居然为.unkown,导致安卓端的wx.saveImageToPhotosAlbum()无法识别图片类型,瞬间无语了。看图:
- wx.getImageInfo({
- src: 'https://域名/项目名/qrcode.action?openId=oxGbN4lm5s&ids=15252&type=buyer',
- success(res) {
- wx.saveImageToPhotosAlbum({
- filePath: res.path,
- success(res) {
- wx.showToast({
- title: '保存图片成功!',
- })
- },
- fail(res) {
- wx.showToast({
- title: '保存图片失败!',
- })
- }
- })
- }
- })
ps:代码是为了说明问题随手写的测试代码!!!
经过几次试验我发现,只要wx.getImageInfo() 的src是以图片格式结尾,安卓就可以正常获取照片信息,然后通过wx.saveImageToPhotosAlbum()保存。我就设想能不能仿照一个以图片格式结尾api,但把.action结尾的接口改为.jpg、.png、.jpeg结尾是不现实的,我也不想被人笑话,所有就有了大胆的想法。
随便加个服务器后台不接收参数名在接口的末尾,令它等于.jpeg(可以改为其他格式),例如:
https://域名/项目名/qrcode.action?openId=oxGbN4lm5s&ids=15252&type=buyer&name=.jpeg
整端代码就是
- wx.getImageInfo({
- src: 'https://域名/项目名/qrcode.action?openId=oxGbN4lm5s&ids=15252&type=buyer&name=.jpeg',
- success(res) {
- wx.saveImageToPhotosAlbum({
- filePath: res.path,
- success(res) {
- wx.showToast({
- title: '保存图片成功!',
- })
- },
- fail(res) {
- wx.showToast({
- title: '保存图片失败!',
- })
- }
- })
- }
- })
完美解决问题!!!
写得不好,仅供参考!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。