Обслуживание файла .APK из CDN с заголовками для установки в Android - PullRequest
0 голосов
/ 27 мая 2019

Я хочу предоставить .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, потому что у меня недостаточно трафика.

Или это можно добавить 'Content-Type: application/vnd.android.package-archive' к загрузке файла с CDN без php?

PS: Когда я запрашиваю чистый APK-файл, потому что он из CDN, он загружается мгновенно, как будтокэширование, но с download.php, требуется время для загрузки.значит в данном случае это не из CDN?

1 Ответ

0 голосов
/ 27 мая 2019

Или возможно ли добавить 'Content-Type: application / vnd.android.package-archive' к загрузке файла из CDN без php?

Да, загрузка в этом случае должна работать правильно.

Но с 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);
...