需求:app不再更新,但还存在少量客户下载的需求。需要把apk包放置我们自己指定的服务器,并把下载链接给前端。
解决方案一:
观察项目是否有静态文件,放置在对应文件目录下,照猫画虎,直接url访问即可。
eg:xxx.cn/resource/other/xxx.apk <apk包放置在/resource/other/目录下>
此方法简单有效,不用改配置也不用写代码,前提是项目里已有成熟的静态文件下载示例。
解决方案二:
1、包上传至静态文件目录下,也可随意其他目录。
2、修改nginx配置,重启nginx服务。
server { listen 80; server_name localhost; location /apk/ { alias /data/app/apks/; autoindex on; default_type application/octet-stream; } }
alias指定虚拟目录 nginx的域名为www.test.com
访问www.test.com/apk/a.txt,实际访问的是/data/app/apks/目录下的a.txt
注意:alias指定的目录后面必须要加上"/",即/data/app/apks/不能改成/data/app/apks
autoindex on;打开目录浏览功能
开启该功能后实现通过浏览器访问当前路径下的文件
default_type application/octet-stream;设置相应的MIME类型
这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件
这样当Url路径中包含/apk/
时,MIME类型会被重置为application/octet-stream
!!!不知道是否受我们项目nginx影响,此方案没有成功。因为域名问题,所以nginx配置必须在原有的配置中进行优化适配。
解决方案三:
不修改nginx配置,直接写程序,走正常的url:/controller/function
<?php
$filename = 'D:/baidu/download/xxx.apk';
if (!file_exists($filename)) { //判断能否获取这个文件
header("Content-type: text/html; charset=utf-8");
echo "File not found!";
exit;
} else {
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: " . filesize($filename));
Header("Content-Disposition: attachment; filename=" . basename($filename));
echo file_get_contents($filename);
exit();
}
此方案自己试过了,成功!