下载视频失败 wx.saveVideoToPhotosAlbum :fail invalid video
在模拟器和真机上测试下载视频并保存到手机相册,是成功的。但是推到体验版本发现下载视频成功但是进行下一步保存会提示保存失败。
一、思路:
1、检查微信公众平台的开发设置是否已添加服务器域名。
2、检查要下载的视频地址是否是https。如果不是,将http替换成https
const urlLInk = item.videoUrl.replace("http:","https:");
3、使用自己永久文件路径
const filepath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf() + '.mp4'
二、错误示范
// 下载视频---错误示范
//为什么错误? 保存视频到本地的时候使用的是下载文件返回的临时地址,所以会报错wx.saveVideoToPhotosAlbum :fail invalid video
goLoadMyVideo(item) {
console.log("下载视频", item);
uni.downloadFile({
url: item.videoUrl,
success: (res) => {
console.log("下载成功", res);
if (res.statusCode === 200) {
uni.saveVideoToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.showToast({
title: "下载成功",
icon: "none",
});
},
fail: () => {
uni.showToast({
title: "下载失败 进入到save",
icon: "none",
});
},
});
}
},
fail: () => {
uni.showToast({
title: "下载失败 fail",
icon: "none",
});
},
});
},
三、正确代码
goLoadMyVideo(item) {
console.log("下载视频", item);
let filepath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf() + '.mp4'
// 下载视频显示进度
uni.downloadFile({
url: item.videoUrl,
filePath: filepath,//指定文件下载后存储的路径
success: (res) => {
console.log("下载成功", res);
const url = res.filePath
if (res.statusCode === 200) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
console.log("授权成功");
uni.saveVideoToPhotosAlbum({
filePath: url,
success: () => {
uni.showToast({
title: "保存视频成功",
icon: "none",
});
},
fail: (err) => {
uni.showToast({
title: err,
icon: "none",
});
},
});
}
})
}
},
fail: () => {
uni.showToast({
title: "下载失败 fail",
icon: "none",
});
},
});
},
四、扩展:提示下载进度
使用onProgressUpdate,官方文档【uni.downloadFile(options) @downloadfile | uni-app】
goLoadMyVideo(item) {
console.log("下载视频", item);
let filepath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf() + '.mp4'
// 下载视频显示进度
const downloadTask = uni.downloadFile({
url: item.videoUrl,
filePath: filepath,//指定文件下载后存储的路径
success: (res) => {
console.log("下载成功", res);
const url = res.filePath
if (res.statusCode === 200) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
console.log("授权成功");
uni.saveVideoToPhotosAlbum({
filePath: url,
success: () => {
uni.showToast({
title: "保存视频成功",
icon: "none",
});
},
fail: (err) => {
uni.showToast({
title: err,
icon: "none",
});
},
});
}
})
}
},
fail: () => {
uni.showToast({
title: "下载失败 fail",
icon: "none",
});
},
});
downloadTask.onProgressUpdate((res)=>{
if (res.progress === 100) {
wx.hideLoading();
wx.showToast({
title: "下载成功",
icon: "none",
});
} else {
wx.showLoading({
title: `正在下载...${res.progress}%`,
})
}
})
},