En essayant de télécharger un fichier pdf
, Firefox télécharge un fichier sans terminer le fichier et signifie que ce serait un fichier application/octet-stream
:
Ce n'est qu'après avoir ajouté manuellement au fichier la fin pdf
que je peux l'ouvrir avec les outils habituels.
Les questions sont:
J'imaginais que l'administrateur du site voulait forcer les utilisateurs à télécharger ses fichiers pdf, au lieu de les ouvrir dans le navigateur, avec quelque chose comme ce paramètre:
AddType application/octet-stream .pdf
Mais là où se termine le fichier reste le sombre secret pour moi.
Pour obtenir l’extension .pdf sur le fichier après le téléchargement, il faut un en-tête HTTP tel que:
Content-Disposition: attachment; filename=some-file.pdf;
Avec cet en-tête, il sera enregistré sous le nom some-file.pdf
même s'il est servi depuis l'URL /pdf-download.php
Voir sur StackOverflow: Comment utiliser Content-disposition pour forcer le téléchargement d’un fichier sur le disque dur?
Le téléchargement PDF échoue ...
De par son son, le téléchargement PDF n'est pas "en échec", il n'est tout simplement pas enregistré avec une extension de fichier .pdf
. Ceci n’est probablement qu’un "problème" sous Windows, qui nécessite l’extension de fichier afin de déterminer le type de fichier. Si je comprends bien, les utilisateurs de Mac pourront toujours ouvrir le fichier sans problème.
Le fait que le fichier soit enregistré sans extension implique que l'URL qui relie le fichier est également sans l'extension de fichier appropriée.
Vous pouvez (en tant qu’utilisateur) améliorer cette situation en configurant votre navigateur de manière à toujours demander le téléchargement de fichiers (recommandé, bien que rarement la configuration par défaut). Vous pouvez alors simplement renommer le fichier dans la boîte de dialogue "Enregistrer sous ..." feriez souvent de toute façon, car les fichiers téléchargés sont rarement nommés de la façon dont vous voudriez qu’ils soient).
AddType application/octet-stream .pdf
On peut soutenir que le comportement de forcer le téléchargement d'un fichier est incorrect en définissant le type mime sur application/octet-stream
. Ceci est très obsolète à mon avis. Il s’agit simplement d’un type mime que le navigateur est probablement impossible à ouvrir, aussi, en dernier recours, offrez-le au téléchargement dans l’espoir que vous savez quoi faire avec.
La méthode "correcte" pour forcer un téléchargement consiste à définir le type de mime correct (c'est-à-dire application/pdf
dans le cas de fichiers PDF), mais également à définir le Content-Disposition: attachment; ...
En-tête de réponse HTTP (comme @Stephen le suggère). C'est la partie attachment
qui force le téléchargement dans tous les navigateurs modernes et l'en-tête Content-Disposition
est toujours aussi le "site Web" pour définir un nom de fichier recommandé lorsque l'URL peut être définie de manière complètement différente (c'est-à-dire toujours éditable si vous avez le navigateur "Demander" pour les téléchargements de fichiers).