3 votes

Servir un exe à Firefox à partir d'un aspx. Firefox le télécharge en tant que "Contenu". Nom de fichier incorrect et pas d'extension

J'essaie d'envoyer un exe à Firefox à partir d'une page aspx. La page aspx gère les en-têtes et la page est lancée par notre interface graphique Flex. Flex lance correctement le lien pour tous les navigateurs (y compris Firefox), je suis donc certain que ce n'est pas le problème.

Le problème que je rencontre est que lorsque j'essaie de télécharger le fichier à partir de Firefox, FF télécharge bien le fichier mais le nomme "Content". Il n'y a pas d'extension et le nom du fichier est incorrect. Tous les autres navigateurs le téléchargent avec le nom de fichier que j'ai spécifié dans la page aspx et ils ont tous l'extension .exe. Je dois noter que si je renomme le fichier "Content" en "Content.exe", il s'exécute correctement.

Voici le code que j'utilise dans ma page aspx -

   protected void Page_Load(object sender, EventArgs e) {
        string fileName = Request.QueryString["file"];
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath(fileName));

        Response.Clear();
        if ( fileName.EndsWith(".exe") ) {
            Response.ContentType = "application/exe";
        }
        else {
            Response.ContentType = "application/octet-stream";
        }
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
    }

Des idées et/ou des suggestions sur la raison pour laquelle cela ne fonctionne pas correctement dans Firefox ?

3voto

Vishalgiri Points 424

Je viens d'exécuter le code exact que vous avez mentionné, sans la partie Flex GUI, dans un simple site web asp.net, et il fonctionne bien sur mon Firefox, j'obtiens le nom du fichier avec l'extension.

J'utilise la version 3.6.16 de Firefox.

Voici quelques solutions que vous pouvez essayer :

  1. Essayez d'exécuter le même code sans l'interface graphique Flex
  2. Si cela ne fonctionne toujours pas, vérifiez votre version de firefox
  3. Comme l'a suggéré Jon, utilisez Fiddler et observez si quelque chose ne va pas dans les en-têtes de la réponse.

En effet, même si l'url est appelée à partir de l'interface graphique Flex, des personnes peuvent surveiller le trafic à l'aide de fiddler ou de wireshark, puis l'exploiter pour télécharger n'importe quel fichier. Par exemple, ils peuvent télécharger web.config et voir la chaîne de connexion, ou ils peuvent télécharger le code.

Vous devez limiter l'utilisateur au téléchargement de fichiers à partir d'un seul emplacement et à quelques extensions autorisées seulement.

0voto

Jon Hanna Points 40291

Il n'est pas nécessaire d'ajouter la longueur du contenu vous-même, car Response.WriteFile le fera le cas échéant. Les en-têtes dupliqués qui en résultent sont incorrects.

J'éviterais également le flushing à la fin, tout d'abord le flushing n'est utile que s'il se produit au milieu d'un long téléchargement ; fait seulement à la fin, vous obtenez les inconvénients de l'encodage chunked, sans aucun des avantages. Cela peut également interférer avec l'en-tête content-length que vous envoyez.

Enfin, il n'y a pas de type de contenu enregistré "application/exe", "application/octet-stream" devrait être utilisé pour les exécutables. Peut-être qu'étant donné que Firefox le considère comme "incorrect" pour les fichiers .exe, il n'utilise pas cette extension.

Si aucune des solutions ci-dessus ne résout le problème, je vous recommande de mettre à jour votre question en y ajoutant les en-têtes envoyés par le navigateur, tels qu'ils sont vus par Fiddler ou d'autres outils similaires, car cela pourrait aider quelqu'un à trouver la réponse (ou vous-même d'ailleurs).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X