В настоящее время я работаю над PHP-скриптом, который позволяет загружать медиа-контент (видео, аудио, изображения …) с вашего мобильного устройства, обращаясь к ссылке. (т. е. http://www.my-web-site.com/download.php?id=7ejs8ap ). Мой скрипт работал очень хорошо, когда я тестировал его с помощью последних мобильных устройств (Samsung Galaxy S, iPhone 4S, некоторые другие … ), но на моем старом мобильном Samsung C3050 произошла ошибка. Средства массовой информации, которые я хотел скачать, были просто аудио mp3-файлом, который я обычно загружаю легко.
Ошибка отображается как «Неизвестный тип содержимого». Итак, поскольку мой единственный HTTP-заголовок Content-Type был «application / force-download», я пытаюсь прокомментировать это и повторить попытку. Тогда это работает. Но теперь я сейчас спрашиваю, что означает этот Content-Type, и может ли он быть обязательным для других мобильных устройств. Я тестировал без Content-Type на iPhone 4, и он работает, но я не уверен в этой совместимости для всех мобильных устройств.
Может ли кто-нибудь объяснить мне, как работает этот Content-Type, почему это не стандартный MIME или все остальное, что может помочь мне убедиться, что это вариантный Content-Type для каждой загрузки, независимо от файла, браузера или устройства I я загружаю?
Всем спасибо.
Вот мои заголовки PHP отправлены:
<?php //Assume that $filename and $filePath are correclty set. header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="'.$filename.'"'); // header('Content-Type: application/force-download'); Non-standard MIME-Type, incompatible with Samsung C3050 for example. Let it commented readfile($filePath); ?>
EDIT: Я просто попробовал с Sony Xperia, и загрузка не была успешной: я вижу только «html-encoded» байты моего файла, который хочу загрузить. Как я могу узнать, какой тип содержимого я должен использовать, если приложение / октет-поток или приложение / принудительная загрузка не работают?
Content-Type: application/force-download
означает «Я, веб-сервер, буду лгать вам (браузеру) о том, что этот файл, чтобы вы не рассматривали его как документ PDF / Word / MP3 / попросите пользователя сохранить таинственный файл на диск вместо этого ». Это грязный хак, который ломается ужасно, когда клиент не делает «сохранить на диск».
Используйте правильный тип mime для любого используемого носителя (например, audio/mpeg
для mp3).
Используйте Content-Disposition: attachment; etc etc
Content-Disposition: attachment; etc etc
если вы хотите, чтобы клиент загружал его, а не следил за поведением по умолчанию.
Чтобы загрузить файл, используйте следующий код … Сохраните имя файла с именем в переменной $ file. Он поддерживает все типы MIME
$file = "location of file to download" header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); 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);
Чтобы узнать о типах Mime, обратитесь к этой ссылке: http://php.net/manual/en/function.mime-content-type.php
application/force-download
не является стандартным MIME-типом. Это взлома, поддерживаемая некоторыми браузерами, добавленная сравнительно недавно.
Ваш вопрос не имеет никакого смысла. Это похоже на вопрос, почему Internet Explorer 4 не поддерживает новейшие функции CSS 3.