@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'];
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы