wx.getImageInfo() 返回結果的屬性臨時路徑path後綴爲.unkown的解決辦法
問題描述
本人做後臺開發,公司有個需求把一個下載鏈接生產二維碼在小程序端顯示,提供用戶保存。由於這下載鏈接會隨時變化,我不想把二維碼保存到服務器,再用資源訪問的方式去瀏覽,所有我直接把二維碼以流的形式輸出,在服務器不作保存,懶得再寫個定時器去定時刪除過期二維碼。
然而懶惰總要付出代價的,公司前端告訴我:二維碼無法正常保存!
然後我做了測試,在小程序裏通過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: '保存圖片失敗!',
})
}
})
}
})
完美解決問題!!!
寫得不好,僅供參考!!!