« Lien de téléchargement » échoue dans IE
-
22-09-2019 - |
Question
Je suis en train de mettre en œuvre un « lien de téléchargement » et le mettre à côté l'un de ma table de rapport afin que les utilisateurs peuvent télécharger un fichier csv et l'ouvrir avec des applications comme Excel.
Les enregistrements sont générés dynamiquement à partir de la requête faite par les utilisateurs.
Donc quelque part dans mon contrôleur il y a quelque chose comme:
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)
Cela fonctionne dans les deux FireFox et Chrome, mais échoue dans IE.
Quand j'imprime les en-têtes de réponse, je trouve que plusieurs têtes ont été ajoutés à ma réponse par web2py: « Expires », « Cache-Control », etc ...
Et quand je supprimer l'en-tête 'Cache-Control' en procédant comme suit:
del response.headers['Cache-Control']
Il fonctionne dans IE.
Il semble donc que IE a du mal à traiter avec un fichier téléchargeable ensemble à certaine valeur « Cache-Control ».
Maintenant, ma question est:
-
Pourquoi web2py n'ajoute ces en-têtes de réponse, implicitement? et peut-être sans un moyen de mettre hors tension?
-
est-il un effet secondaire lorsque je supprime l'en-tête 'Cache-Control' de cette façon?
Merci d'avance.
La solution
Je ne suis pas sûr de ce que les en-têtes de contrôle du cache sont / ont été envoyées, mais IE a un bug avec les fichiers téléchargés comme vous rencontrez.
Pour IE, vous devez activer la mise en cache . Lorsque IE fichiers charge (par exemple des fichiers Excel), dans Excel, il les charge à partir du répertoire de cache, donc si vous ne mettez en cache pas, Excel (ou votre autre application) ne parviennent pas à charger le fichier.
Eric Law (MSFT) sur le sujet: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no- cache.aspx
Mise à jour : Si toutefois vous voulez juste forcer le téléchargement ... par exemple pas IE charger le fichier Excel dans la fenêtre IE ... alors assurez-vous de définir les en-têtes complets pour la pièce jointe.
//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
Autres conseils
Le lien de téléchargement via https (ssl)? Si oui, alors IE ne peut pas gérer le téléchargement si elle est définie à être mis en cache. Ceci est un problème connu avec IE.
Cela ne répond pas à votre question, mais permet de résoudre, je l'espère, problème d'origine.
Je voudrais juste ajouter l'horodatage (quelque chose d'assez unique) pour interroger chaîne de lien vers un fichier CSV. Il a aidé pour moi.