完美解决wx.saveVideoToPhotosAlbum保存视频到手机会出现的各种错误,
大致分为两步:
文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为 200MB。
wx.downloadFile({
url: 'https://example.com/audio/123', //仅为示例,并非真实的资源
success (res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
wx.playVoice({
filePath: res.tempFilePath
})
}
}
})
保存视频到系统相册。支持mp4视频格式。
wx.saveVideoToPhotosAlbum({
filePath: 'wxfile://xxx',
success (res) {
console.log(res.errMsg)
}
})
实践
错误示范
download() {
wx.showLoading({
title: '下载中...',
})
wx.downloadFile({
url: 视频信息的Url,
success: function (res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
console.log(res.tempFilePath);
wx.saveVideoToPhotosAlbum({
filePath: res.tempFilePath,//临时地址
success: function (res) {
console.log(res.errMsg)
wx.hideLoading();
}
})
}
}
})
}
以上保存视频到本地时使用的是下载文件返回的临时地址,会报错wx.saveVideoToPhotosAlbum :fail invalid video,那么就试试自己拼接的“永久文件路径”,
download() {
//初始化指定文件下载后存储的路径
let filepath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf() + '.mp4'
wx.showLoading({
title: '下载中...',
})
wx.downloadFile({
url: 视频url链接,
filePath: filepath,//指定文件下载后存储的路径
success: function (res1) {
console.log(res1);
var url = res1.filePath
if (res1.statusCode === 200) {
wx.saveVideoToPhotosAlbum({
filePath: url,//下载的视频路径
success: function (res) {
wx.hideLoading();
wx.showToast({
title: '下载成功',
})
},
fail(err) {
console.log(err);
}
})
}
},
fail(err) {
console.log(err);
wx.hideLoading();
wx.showToast({
title: '下载失败',
icon:'error'
})
}
})
},
至此就可以下载了,亲测安卓、ios都可以,不过必须是小程序使用的服务器上的视频!!!
演示视频
演示