通过CDN提供CDN中的.APK文件,以便在Android中安装

时间:2019-05-27 08:52:07

标签: php android download http-headers cdn

我想向用户提供.APK文件供下载。我有一个CDN,它工作正常。当我请求文件下载时,它从CDN下载。但是我有一个问题。我的用户请求从Android设备进行下载,在这种情况下,下载纯APK文件会遇到麻烦,因为我希望用户安装该APK文件,而使用纯APK则是我所知的。因此,我像这样创建一个.php文件并添加'Content-Type: application/vnd.android.package-archive'

<?php

$file = 'myfile.apk'; //File that we want to send to user.

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/vnd.android.package-archive');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

当我请求download.php时,它的工作和用户可以下载并安装APK文件。现在我的问题是,在这种情况下,该文件是从CDN下载的吗?我希望download.php和APK文件都可以从CDN提供,因为我的流量不足。

或者是否可以在没有php的情况下将'Content-Type: application/vnd.android.package-archive'添加到从CDN下载文件中?

PS:当我请求纯APK文件时,因为它来自CDN,它会像缓存一样立即下载,但是使用download.php时,它需要花费一些时间来下载。这意味着不是CDN吗?

1 个答案:

答案 0 :(得分:0)

  

或者是否可以将'Content-Type:application / vnd.android.package-archive'添加到没有php的CDN下载文件中?

是的,在这种情况下,下载必须能正常工作。

  

但是使用download.php,下载时间很长。这意味着不是CDN吗?

这需要时间,因为您使用readfile并输出缓冲。在这种情况下,仅在php将目标文件的内容完全加载到内存后才开始下载。如果您打算投放较大的apk文件,则可能会出现此问题。

您可以通过以下方式为他们服务:

// set headers here ...
$output = fopen('php://out', 'a');
$target = fopen($target, 'r');

if (!$target || !$output) {
    //  throw error, if cant read file or 
}

// read target file, using buffer size 1024
while (!feof($target)) {
    fwrite($output, fread($target, 1024), 1024);
}

fclose($target);
fclose($output);