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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top