Placer télécharger le fichier dans le navigateur avec un bon nom de fichier
Je suis en train de faire des travaux sur un site web qui a une zone sécurisée qui est à la disposition des utilisateurs qu'après avoir connecté. Dans ce domaine, il y a une page avec des liens vers des documents pdf qui peut être téléchargé. Les documents sont en dehors du site web du répertoire racine. Les liens vers les documents pdf ressembler à quelque chose comme ceci:
index.le php?page=sécurité-zone/download&fichier=protégés.pdf
Qui exécute les suivantes (note: je sais que c'est le moyen de forcer un téléchargement plutôt que d'ouvrir le fichier à l'intérieur de le navigateur):
//check security, get filename from request, prefix document download directory and check for file existance then...
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Connection: Close');
set_time_limit(0);
readfile($file);
Cela fonctionne bien, mais dans Firefox 3 et Internet Explorer 7 (je n'ai pas testé avec un autre navigateur) n'est pas ouvrir ce fichier à l'intérieur du navigateur, ils montrent tous les deux de la boîte de dialogue de téléchargement (comme prévu). Si j'ai choisi d'Ouvrir plutôt que de les Enregistrer, le document est téléchargé et Adobe Reader est commencé en dehors du navigateur pour afficher le document.
Le problème que j'ai est de télécharger le fichier dans le navigateur et avoir le bon nom de fichier par défaut s'il est enregistré.
Je voudrais le document pour l'ouvrir dans le navigateur. Une façon de le faire est d'utiliser l'en-tête "Content-Disposition: inline;" mais cela signifie que je ne peux pas spécifier un nom de fichier (parce que c'est semble être ignoré par le navigateur). Le problème avec c'est quand j'ai enregistré le document, le nom par défaut est celui de l'URL, et non le nom de fichier du document pdf:
http___example.com_index.php_page=secure_area_download&file=protected.pdf
Comment puis-je obtenir Firefox et Internet Explorer pour ouvrir le document dans le navigateur et de fournir le bon nom de fichier par défaut pour enregistrer?
OriginalL'auteur |
Vous devez vous connecter pour publier un commentaire.
J'ai enfin venir avec un travail autour de ce problème.
Bien que la RFC 2183 montre qu'un nom de fichier en paramètre peut être utilisé pour la pièce jointe et en ligne pour le Content-Disposition champ d'en-tête, il semble que les navigateurs ignorent le nom de fichier en paramètre lors de l'inline est utilisé, mais plutôt essayer de travailler sur ce que le nom de fichier doit être basé sur l'URL. Si l'URL n'a pas de chaîne de requête de la partie de l'URL qui suit le dernier /semble être utilisé comme nom de fichier.
J'ai changé les liens que télécharger les documents PDF protégés à l'utilisation de nice Url ne contiennent pas une chaîne de requête et de l'utilisation de mod_rewrite avec un .fichier htaccess pour convertir ces belles URLs pour exécuter le script correct avec les paramètres corrects:
Ancien lien:
Nouveau Lien:
.htaccess:
Le script utilisé pour envoyer le fichier est le même que j'ai utilisé avant (note de l'exemple en question utilise le Content-Disposition: attachment plutôt Content-Disposition: inline pour démontrer les navigateurs d'enregistrer le document avec le bon nom de fichier lors de l' pas inline).
Maintenant le document PDF s'ouvre dans le navigateur et lors de l'enregistrement du nom de fichier par défaut est
et pas
IE 7 convertit les espaces dans le nom du fichier à +'s et les guillemets simples pour %27 lors de l'enregistrement (Firefox ne marche pas), je voudrais empêcher ça, mais pour l'instant je suis heureux avec ce que j'ai.
En fait, il ne répondu à ma question.
Ce hack est toujours nécessaire pour Internet Explorer 11, tandis que inutiles pour Chrome et Firefox (testé avec v47 et v43).
OriginalL'auteur Stacey Richards
Essayez d'utiliser
OriginalL'auteur Samuel
Non, ce qu'elle dit, c'est qu'il n'est pas possible de spécifier le nom de fichier lors de l' 'Content-disposition:inline" est utilisé. Nom de fichier n'est utilisé que lors de l'utilisation de 'Content-disposition:attachment', comme dans son premier exemple. Cette résultats dans le document en cours de téléchargement avec le bon nom de fichier. Cependant, ce que cette solution est d'essayer de réaliser un document rendu INLINE, qui une fois téléchargés à partir du navigateur utilise le bon nom de fichier, au lieu du nom du script.
Est-il un autre moyen de spécifier le nom de fichier lors de l'utilisation de 'inline' autre que la réécriture d'url? La page que j'ai écrite à rendre docs prend un ID de base de données, de sorte que la réécriture serait plus difficile je pense (le nom de fichier devrait être interrogée à partir de la base de données).
OriginalL'auteur
Content-disposition:inline
peuvent être utilisés avec le nom de fichier. Mais seulement certains navigateurs undertand et de le suivre. L'effet est visible uniquement lorsque vous enregistrez le nom de fichier vous-même, le nom de fichier que vous définissez à disposition du contenu sera utilisé.OriginalL'auteur
Vous la raconter à le faire que par l'aide de Content-disposition: attachment. Essayez à l'aide de Content-disposition: inline.
OriginalL'auteur chaos