@maxdart

Как решить проблему с загрузкой файлов с сервера в IOS и Android?

Всем привет!

Столкнулся со следующей проблемой. Имеется PHP-скрипт, который берет из базы данных файл (BLOB, изображение, либо PDF), и выдает его для загрузки браузеру, предварительно сформировав нужные заголовки. Этот скрипт корректно работает во всех протестированных декстопных браузерах (FF, Chrome, Opera, MSIE), но при попытке загрузить файл на мобильном устройстве, загружается пустое изображение. Такая картина наблюдается, как минимум в Safari на Iphone (IOS 10.3), и Chrome на устройствах с Android 6. Были перепробованы самые различные варианты отправки headers и их комбинации, но пока что, увы, безрезультатно.

Буду благодарен за советы по формированию заголовков, которые будут корректно восприниматься как декстопными, так и мобильными браузерами.

Привожу значимый в данной проблеме отрывок скрипта:

$res = $db->getBLOB($_GET['fid']);
$theUA = strtolower($_SERVER['HTTP_USER_AGENT']);
$fileName = $res['name'];
$formatRFC2231 = 'Content-Disposition: attachment; filename*=UTF-8\'\'%s;';
$formatDef = 'Content-Disposition: attachment; filename="%s";';
$format = $formatDef;
if(strpos($theUA,'msie') || strpos($theUA,'chrome')) {
	$fileName = rawurlencode($fileName);
}
if(strpos($theUA,'opera') || strpos($theUA,'firefox')) {
	$fileName = rawurlencode($fileName);
	$format = $formatRFC2231;
}
$contentDisp = sprintf($format, $fileName);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
header("Content-type: ".$res['ctype']);
header($contentDisp);
header("Content-Encoding: binary");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
echo $res['content'];
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Hunt4You Севастополь
от 70 000 до 150 000 руб.
Моризо Digital Москва
от 120 000 до 250 000 руб.
Postuf Москва
от 150 000 до 350 000 руб.