最近項目中遇到一個需求,就是要保存商品的圖片到手機(jī)相冊,一開始我還以為挺簡單的,畢竟文檔在哪里,小程序一般都是拿來就用的,可是這個就是不行,遇到提示saveImageToPhotosAlbum:fail file not found問題,最后發(fā)現(xiàn)是用戶沒有授權(quán)。解決這個問題又發(fā)現(xiàn)小程序又無法保存圖片,這明明是同意了為什么還不行,經(jīng)過研究發(fā)現(xiàn),我沒要先獲取圖片信息在進(jìn)行保存就可以了。我使用的是uni-app來開發(fā)的,如果你用原生小程序開發(fā)的話就把uni改成wx吧!在這里我強(qiáng)烈推薦大家使用uni-app來開發(fā)小程序。具體什么好處,大伙可以去看看uni-app的文檔,好了不多說看代碼。
/* 如果是這么寫的,可以不使用button設(shè)置open-type屬性*/
/* 判斷是否授權(quán) */
uni.authorize({
/* 這個就是保存相冊的 */
scope: 'scope.writePhotosAlbum',
success() {
/* 保存圖片方法 */
img();
},
complete(res) {
console.log(res);
/* 這里判斷一下如果沒有授權(quán)重新打開設(shè)置選項 */
uni.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
/* 打開設(shè)置的方法 */
opensit();
}
}
});
}
});
/* 授權(quán)提示 ,這里就是重復(fù)提示用戶去授權(quán)*/
function opensit() {
uni.showModal({
content: '由于您還沒有允許保存圖片到您相冊里,這無法進(jìn)行分享操作點(diǎn)擊確定去允許授權(quán)',
success: function(res) {
if (res.confirm) {
/* 這個就是打開設(shè)置的API*/
uni.openSetting({
success(res) {
console.log(res.authSetting);
}
});
} else if (res.cancel) {
uni.showModal({
cancelText: '依然取消',
confirmText: '重新授權(quán)',
content: '很遺憾你點(diǎn)擊了取消,這將無法進(jìn)行分享操作,請慎重考慮',
success: function(res) {
if (res.confirm) {
uni.openSetting({
success(res) {
console.log(res.authSetting);
}
});
} else if (res.cancel) {
console.log('用戶不授權(quán)');
}
}
});
}
}
});
}
/* 特別注意要先獲取圖片信息在進(jìn)行保存,不讓保存不了 */
function img() {
/* 我這里要保存多張圖片,一張的話就可以取消這些,具體看你的需求 */
if (num > len) {
return false;
}
/* 獲取圖片信息 */
uni.getImageInfo({
src: obj[num],
success: function(image) {
console.log(image);
/* 保存圖片到相冊 */
uni.saveImageToPhotosAlbum({
filePath: image.path,
success: function() {
console.log('save success');
if (num == len) {
uni.showModal({
title: '保存成功',
content: '圖片已成功保存到相冊,快去分享到您的圈子吧',
showCancel: false
});
}
},
complete(res) {
console.log(res);
}
});
}
});
num++;
img();
}