web-dev-qa-db-fra.com

Utilitaire d'en-tête HTTP "Content-Type: application / force-download" pour mobile?

Je travaille actuellement sur un script PHP qui vous permet de télécharger du contenu multimédia (vidéo, audio, photos ...) depuis votre appareil mobile en accédant à un lien. (Ie http : //www.my-web-site.com/download.php? id = 7ejs8ap ) Mon script fonctionnait très bien lorsque je le testais avec un mobile récent (Samsung Galaxy S, iPhone 4S, quelques autres ... ) mais une erreur s'est produite sur mon ancien mobile Samsung C3050. Le support que je voulais télécharger n'était qu'un fichier mp3 audio que je télécharge habituellement facilement.

L'erreur semble être "Type de contenu inconnu". Donc, comme mon seul en-tête HTTP Content-Type était "application/force-download", j'essaie de commenter ceci et d'essayer à nouveau. Ensuite, ça marche. Mais maintenant, je demande actuellement ce que signifie ce type de contenu et s'il peut être obligatoire pour les autres mobiles. J'ai testé sans le Content-Type sur l'iPhone 4 et ça marche, mais je ne suis pas sûr de cette compatibilité pour tous les mobiles.

Quelqu'un peut-il m'expliquer comment fonctionne ce type de contenu, pourquoi ce n'est pas un MIME standard ou tout ce qui peut m'aider à être sûr qu'il s'agit d'un type de contenu optionnel pour chaque téléchargement, quel que soit le fichier, le navigateur ou l'appareil que je suis-je en train de télécharger?

Merci tout le monde.

Voici mes PHP envoyés:

<?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: J'ai juste essayé avec un Sony Xperia, et le téléchargement n'a pas réussi: je ne vois que les octets "html-encodés" de mon fichier que je veux télécharger. Comment savoir quel type de contenu je dois utiliser si application/octet-stream ou application/force-download ne fonctionne pas?

38
niconoe

Content-Type: application/force-download signifie "Moi, le serveur Web, je vais vous mentir (le navigateur) à propos de ce que ce fichier est afin que vous ne le traitiez pas comme un PDF/Document Word/MP3/quoi que ce soit et invite l'utilisateur à sauver le mystérieux fichier sur le disque à la place ". C'est un hack sale qui se brise horriblement lorsque le client ne fait pas de "sauvegarde sur disque".

Utilisez le type MIME correct pour tous les supports que vous utilisez (par exemple audio/mpeg pour mp3).

Utilisez le Content-Disposition: attachment; etc etc header si vous souhaitez encourager le client à le télécharger au lieu de suivre le comportement par défaut.

113
Quentin

Pour télécharger un fichier, veuillez utiliser le code suivant ... Stockez le nom du fichier avec l'emplacement dans la variable $ file. Il prend en charge tous les types de 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);

Pour connaître les types MIME, veuillez vous référer à ce lien: http://php.net/manual/en/function.mime-content-type.php

13
Suresh kumar

application/force-download n'est pas un type MIME standard. C'est un hack pris en charge par certains navigateurs, ajouté assez récemment.

Votre question n'a pas vraiment de sens. C'est comme demander pourquoi Internet Explorer 4 ne prend pas en charge la dernière fonctionnalité CSS 3.

4
Jon Grant