以下方案可以解决小程序由于安全域名限制无法下载视频或图片、小程序无法下载http协议的视频和图片的问题已经如何利用PHP做一个文件中转站的方案。
教程提要
说一下为什么会写这个教程,如果关注我时间比较久的朋友,应该会发现之前发布的一款无后台直接运营的去水印小程序中接口的返回值域名不固定,所以在下载视频时会很大可能出现由于未设置安全域名而导致视频无法下载的问题。还有最近找到了一个图库的API地址,但是代码都快写完了,才发现他所有的图片都是http协议的,小程序没有办法下载未配置ssl的文件,所以出现了很多问题。
由于个人不怎么使用去水印小程序,所以一直也没有去研究这个PHP中转的功能,但是最近的壁纸下程序确实消耗了不少时间,所以也就研究了一下,这里给大家总结一下,让小程序下载问题再也不是问题。下面以下载http协议的图片为例。
解决思路
一开始想了很多方案,由于自己比较擅长JS所以就选择了用PHP去做这件事(没错,没点挑战性,就没意思了)。最笨的方法就是将图片地址发送到服务器,由服务器下载完成后再发送给小程序,自己的服务器域名添加ssl就比较简单了,但是这样的方案有个比较现实的问题就是你需要去存储文件,这样用户多了,成本就提高了很多,所以不采取。
然后想着图片本来也不大,可以直接利用PHP的缓存机制来实现,通过向服务器发送图片地址,然后有readfile()
函数输出缓冲,最后利用 @flush(); @ob_flush();
释放缓冲。如果不懂这些函数的可以自行百度,这里就不多讲了。
实现代码
<?php
$imgUrl = $_GET['imgUrl'];
header("Content-Type: image/JPEG");
@ob_end_clean();
@readfile($imgUrl);
@flush(); @ob_flush();
exit();
?>
以上就是完整的代码,就这么几行,就可以轻松实现上述功能了,将上诉代码卸载php文件中上传到服务器,例如将php文件命名为api.php,直接请求域名/api.php?imgUrl=图片地址
,这样就可以实现下载功能了。当然你还需要将你的域名配置到安全域名。
代码扩展
图片文件完成了,现在来说一说视频下载,同理就可以得到一下代码,修改一下header即可。
<?php
$videoUrl= $_GET['videoUrl'];
header('Content-type: application/mp4');
@ob_end_clean();
@readfile($videoUrl);
@flush(); @ob_flush();
exit();
?>
访问方式为:域名/api.php?videoUrl=视频地址
重要补充
如果完成以上的步骤理论上是可以实现下载的,在开发者工具中也确实可以实现,但是在小程序中会出现一个问题,那就是下载后的文件的后缀为unknown,最后导致系统无法识别,因为小程序也无法判断下载的文件的类型,他只是实现了下载,所以我们还需要进行一下操作,同样以图片下载为例。
wx.downloadFile API中可以设置下载文件的路径,所以我们先利用wx.env.USER_DATA_PATH设置好图片的路径,直接设置文件的名称和路径,这样就可以保存为你想要的文件格式了。
以下代码付费阅读,主要是想喝杯奶茶,就是这样!
视频文件下载自己按照例子改吧,如果看懂了应该就会了,如果没看懂给你代码也还是不会,哈哈哈。
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
看了看了看了
我想看大佬的代码
我想看大佬的代码
怎么实现呢
@z
上面写的听清楚的,就是通过php中转下载
大佬如果要下载那种文件流的图片而且还是http的怎么办
@mkyx
都一样的,那两个就是php的全部代码了
我想看大佬的代码
66666牛逼
66666666666