2010-12-06 26 views
0

Je suis dans le besoin d'utiliser This Class pour server plusieurs fichiers (img/video/mp3) d'un site d'écriture d'article que j'utilise, le seul et principal problème est que: Toutes les images dans les articles doivent être affichées par cette classe, et que cette classe n'affiche pas les images (lance un téléchargement lorsqu'elle est appelée par l'URL). Je réussi à résoudre ce problème en supprimant cette ligne (peut-être la ligne 107)Les images n'étant pas montrées dans IE, firefox/chrome/autres sont bonnes!

header('Content-Disposition:attachment; filename="'.$this->properties["name"].'";'); 

qui m'a bien servi dans l'affichage des images de Chrome et Firefox, mais IE téléchargement encore lancer :(.

Y at-il façon/en-têtes pour résoudre ce

Edit:?

J'ajouté ce qui suit au type meta:

case "jpg": $content_type="image/".$file_extension; break; 
case "gif": $content_type="image/".$file_extension; break; 
case "png": $content_type="image/".$file_extension; break; 
+0

Quelle est la valeur de $ this-> properties ["name"] '? – Gumbo

+0

{anything} .jpg où tout est a-zA-Z0-9_ –

+1

@Ronan Dejhero: Eh bien, * attachment * signifie télécharger le fichier au lieu de l'afficher directement; essayez * inline * à la place. – Gumbo

Répondre

0

Avec la mise en Content-Disposition-attache est en fait destiné à être utilisé pour ne pas afficher la ressource directement:

Bodyparts peut être désigné `attachement » pour indiquer qu'ils sont séparés de la principale le corps du message, et que leur affichage ne devrait pas être automatique, mais subordonné à une autre action de l'utilisateur.

Mais bien que le Content-Disposition header field est plutôt partie de MIME et ne fait pas partie de HTTP, il « a été proposé comme un moyen pour le serveur d'origine pour suggérer un nom de fichier par défaut si l'utilisateur demande que le contenu est enregistré dans un fichier « . (Voir HTTP/1.1 – 19.5 Additional Features)

en plus de cela, l'utilisation du type de support spécial application/octet-stream est recommandé d'impliquer un téléchargement:

Si cet en-tête est utilisé dans une réponse à l'application/o ctet-stream content-type, la suggestion implicite est que l'agent utilisateur ne devrait pas afficher la réponse, mais entrer directement une boîte de dialogue `save response as ... '.

Mais puisque vous voulez des ressources à afficher directement, utilisez le Content-Disposition valeur en ligne à la place. Avec cela, vous pouvez utiliser le paramètre filename ainsi que spécifier un nom de fichier différent de l'URL. Voir aussi Julian Reschke’s Test Cases for HTTP Content-Disposition header field and the Encodings defined in RFC 2047 and RFC 2231/5987 pour plus d'informations sur les codages utilisés pour encoder le paramètre filename.

0

Je suppose que IE exigeait toujours un en-tête Content-Type valide (en supposant que la classe n'en fournisse pas une pour les images car elle ne faisait que forcer un téléchargement). Probablement besoin de changer ce morceau de code:

switch($file_extension) { // the file type 
    case "mp3": $content_type="audio/mpeg"; break; 
    case "mpg": $content_type="video/mpeg"; break; 
    case "avi": $content_type="video/x-msvideo"; break; 
    case "wmv": $content_type="video/x-ms-wmv";break; 
    case "wma": $content_type="audio/x-ms-wma";break; 
    default: $content_type="application/force-download"; 
} 

et d'ajouter les extensions d'image et leur type MIME associé.

+0

Est-ce que déjà désolé oublié de le mentionner –