2008-11-17 8 views
1

Salutations!Redirection vers des fichiers EXE avec des paramètres de chaîne de requête et IE6/7

Je me gratter la tête, se demandant pourquoi quand je fais ce qui suit:

Response.Redirect(@"http://www.example.com/file.exe?id=12345"); 

Les deux IE6 et IE7 va télécharger le fichier en tant que "fichier" (sans extension), mais Firefox, Opera, Google Chrome et Safari n'ont aucun problème à télécharger le fichier sous "fichier.exe".

Une idée de ce qu'est le problème de IE6/7 et comment puis-je résoudre ce problème?

Répondre

2

Avez-vous essayé de définir un type de contenu correct dans Vos en-têtes de réponse? Par exemple:

Content-Type: application/octet-stream 
Content-Disposition: attachment; filename="file.exe" 
0

Vous aurez probablement besoin d'obtenir la taille du fichier à distance et l'ajouter au contenu longueur de la section d'en-tête.

+0

Malheureusement, les fichiers sont hébergés sur un autre serveur dans le même domaine. – Bullines

0

Si vous utilisez fiddler2 (http://www.fiddler2.com/fiddler2/), vous pouvez voir exactement quels en-têtes sont envoyés à IE, ce qui peut vous aider dans le débogage.

Peut-être pouvez-vous publier les en-têtes qui en résultent ici? Je doute que l'ajout du Content-Type et du Content-Disposition avant la redirection ait un effet, puisque le navigateur voit l'en-tête de redirection et envoie une requête http complètement nouvelle à l'URL redirigée, ce qui sera complètement différent ensemble d'en-têtes.

Cependant, vous pouvez essayer un Server.Transfer qui est une redirection côté serveur, quelque chose comme ce qui suit:

Response.Clear(); //In case your .aspx page has already written some html content 
Response.AddHeader("Content-Type", "application/octet-stream"); 
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe 
Response.AddHeader("Content-Disposition", disp); 

Server.Transfer(@"http://www.example.com/file.exe?id=12345"); 

Ou bien, utilisez Response.BinaryWrite:

Response.Clear(); //In case your .aspx page has already written some html content 
byte[] exeContent = ... //read the content of the .exe into a byte[] 

Response.AddHeader("Content-Type", "application/octet-stream"); 
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe 
Response.AddHeader("Content-Disposition", disp); 

Response.BinaryWrite(exeContent); 
Questions connexes