Утилита HTTP-заголовка "Content-Type: application/force-download" для мобильных устройств?

В настоящее время я работаю над PHP script, который позволяет загружать содержимое мультимедиа (видео, аудио, изображения...) с вашего мобильного устройства, обращаясь к ссылке. (т.е. http://www.my-web-site.com/download.php?id=7ejs8ap) Мой script работал очень хорошо, когда я тестировал его с помощью последних мобильных телефонов (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 для каждой загрузки, независимо от файла, браузера или устройство, которое я загружаю?

Спасибо всем.

Вот мои отправленные заголовки 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-кодированием" моего файла, который я хочу скачать. Как я могу узнать, какой тип содержимого я должен использовать, если приложение/октет-поток или приложение/принудительная загрузка не работают?

Ответ 1

Content-Type: application/force-download означает "Я, веб-сервер, буду врать вам (браузеру) о том, что этот файл, чтобы вы не рассматривали его как документ PDF/Word/MP3/whatever и запрашивали пользователя вместо этого сохранить таинственный файл на диск". Это грязный хак, который ломается ужасно, когда клиент не делает "сохранить на диск".

Используйте правильный тип mime для любого используемого носителя (например, audio/mpeg для mp3).

Используйте заголовок Content-Disposition: attachment; etc etc, если вы хотите, чтобы клиент загружал его, а не выполнял поведение по умолчанию.

Ответ 2

Чтобы загрузить файл, используйте следующий код... Сохраните имя файла с именем в переменной $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

Ответ 3

application/force-download не является стандартным типом MIME. Это взлом, поддерживаемый некоторыми браузерами, добавленный довольно недавно.

Ваш вопрос не имеет никакого смысла. Ему нравится спрашивать, почему Internet Explorer 4 не поддерживает новейшие функции CSS 3.