最近开发小程序项目有个需求,是在小程序端下载各种各样域名的视频,由于视频地址的域名不是固定的,因此无法在微信后台进行设置域名后直接在小程序端进行下载,解决方法如下,后端采用的是php
小程序端代码如下,跟普通下载没区别,最重要一点是对视频进行重命名,不然会出现下载文件tempFilePath后缀unknown的问题,还有一个是删除掉缓存文件,不然类积超过10M,就无法再下载,会报缓存满的错误
//微信小程序代码,下载视频文件到本地
downLoadFile:function(){
wx.showLoading({
title: '下载中..',
})
var that = this
//下载文件,生成临时地址
var fileName = new Date().valueOf();
var filePath = wx.env.USER_DATA_PATH + '/' + fileName + '.mp4'
wx.downloadFile({
url: that.data.downUrl,//后端下载视频的接口地址,如:test.com/api/downLoadVideo?url=http://abc.com/1.mp4
filePath: filePath,
success(res) {
wx.hideLoading();
//保存到本地
const savedFilePath = res.filePath;
//保存文件
wx.saveVideoToPhotosAlbum({
filePath: savedFilePath,
success:function(data){
wx.showModal({
title: '提示',
content: '下载成功,文件已保存至您的手机',
})
},
fail:function(err){
console.log(err)
wx.showModal({
title: '提示',
content: '保存失败,需要您授权保存相册,请手动通过小程序的设置功能授权使用相册,再进行下载',
})
},
complete:function(){
/* 删除文件缓存,否则类积超过10M保存失败 */
let fileMgr = wx.getFileSystemManager();
fileMgr.unlink({
filePath: filePath,
success: function (r) {
console.log("删除成功")
},
})
}
})
},
fail: function (err) {
wx.hideLoading();
wx.showModal({
title: '提示',
content: '下载失败,可能文件太大,请复制链接到手机浏览器中下载',
})
}
})
}
后端php代码如下
/**
* 下载远程地址视频到本地
* $url为实际视频的地址
*/
function downLoadVideo()
{
$url = input($url);
//设置文件的类型
header('Content-type: application/mp4');
//下载显示的名字
$filename = time().".mp4";
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile("$url");
exit();
}