2009-08-13 6 views
7

J'ai une page aspx avec linkbuttons qui java javascript pour ouvrir une nouvelle page ASPX pour diffuser des fichiers dans le navigateur pour le téléchargement par les utilisateurs. Lors du développement et des tests unitaires sur XP SP3, IE 7 et FireFox 3.5, en utilisant le code suivant (la clé étant la pièce jointe dans la balise Content-Disposition), les deux invitent une boîte de dialogue demandant si je veux enregistrer ou ouvrir le document, ce qui est exactement ce que je veux arriver:IE 7 bug? - prompt enregistrer/ouvrir lors du téléchargement de fichier - C# asp.net 3.5

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

Quand je déploie à un serveur Windows 2003 et accédez à la même page ASPX, FireFox 3.5 demande correctement une option Enregistrer/ouvrir comme prévu puisque c'est l'opération par défaut dans FF. Lorsque je navigue dans IE 7 et que je clique pour télécharger, j'obtiens une fenêtre pop-up qui est visible pour les sommets de 1/8 de seconde ... et disparaît. Aucune invite à enregistrer/ouvrir.

Si je vais dans IE 7 -> Outils -> Options Internet -> Sécurité -> Personnaliser le niveau -> Téléchargements

Demander confirmation pour les téléchargements de fichiers est désactivé. Quand je le vérifie pour l'activer, alors l'invite Enregistrer/Ouvrir fonctionne correctement.

Donc ma question est ..... est-ce que quelqu'un a eu un travail autour de cela? J'ai essayé un tas de choses que les gens prétendent travailler avec différentes balises Header telles que cache, pragma, etc etc ... rien de tout cela ne contourne le fait que IE a la propriété de téléchargement désactivé par défaut.

+0

J'ai essayé quelque chose de similaire et cela fonctionne dans IE7,8. Pouvez-vous fournir la valeur exacte du m_mimeType que vous utilisez? –

+0

pour tester l'utilisation de mime et de format dans la liste des paramètres "application/pdf", "PDF" –

+0

Avez-vous essayé d'autres méthodes, par ex. application/zip Quelque chose que IE7 ne peut pas afficher dans sa fenêtre. –

Répondre

2

Nous avons récemment rencontré un problème identique avec notre implémentation pour le téléchargement de rapports générés dans notre infrastructure Web personnalisée. La recherche nous a conduit à essayer la même approche que vous avez mentionnée (mise en place de Content-Disposition).

Le problème est lié à IE7 et aux zones de sécurité. Par défaut, certaines actions DOIVENT être explicitement initiées par l'utilisateur. Vous pouvez commencer par regarder Understanding and Working in Protected Mode Internet Explorer et About Window Restrictions

0

Sans rapport avec ce problème, mais vous devez citer le nom du fichier dans votre sortie. Les espaces dans le nom du fichier vont bousiller le nom du fichier lors du téléchargement du fichier.

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\""); 
0

Essayez cette

Button1_Click protected void (object sender, EventArgs e) { Response.ContentType = "application/pdf"; Response.Clear(); Response.TransmitFile ("test.pdf"); Response.End(); }

+0

Si vous voyez dans mon exemple, le fichier ne provient pas du système de fichiers, c'est un tableau d'octets im utilisant BinaryWrite() pour écrire dans le navigateur. TransmitFile() ne fonctionnera pas dans ce cas sauf si j'assemble physiquement les fichiers sur le système. –

1

Si vous souhaitez ajouter votre page aux sites de confiance, vous pourrez télécharger le fichier. Tout en développant tous vos sites que vous utilisez sont dans cette zone.

Vous pouvez essayer de forcer l'explorateur Internet en ajoutant

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

à la fin de votre demande. Sinon, vous pouvez essayer d'afficher le lien vers le document, de sorte que le navigateur voit la demande comme une réponse de l'interaction de l'utilisateur.

0

S'il n'est pas nécessaire d'ouvrir une nouvelle page à l'aide de javascript, vous pouvez utiliser Response.Redirect() sur la page aspx. Cela devrait ouvrir la boîte de dialogue Enregistrer/Ouvrir.

Questions connexes