web-dev-qa-db-fra.com

PDF le téléchargement échoue à cause de ... quoi?

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:

enter image description here

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:

  • de quel côté est un problème? Sur mon ou sur l'administrateur du site, où je télécharge le fichier?
  • Dans les deux cas: qu'est-ce qui ne va pas?

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.

1
Evgeniy

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?

3

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).

1
MrWhite