2008-10-15 9 views
1

J'utilise ASP.NET pour transmettre un fichier .jar. Ce code fonctionne parfaitement sur IE. Cependant sur Firefox les téléchargements de fichiers, corrompus. Quelle est la meilleure façon de le réparer? Voici le code que j'utilise.Dans ASP.NET existe-t-il une manière différente qu'un fichier doit être transmis dans Firefox?

private void TransferFile() 
{ 
    try 
    { 
     string filePath = Server.MapPath("SomeJarFIle.jar"); 

     FileInfo file = new FileInfo(filePath); 

     if (file.Exists) 
     { 
      // Clear the content of the response 
      //Response.ClearContent(); 
      Response.Clear(); 

      // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 

      // Add the file size into the response header 
      Response.AddHeader("Content-Length", file.Length.ToString()); 

      // Set the ContentType 
      Response.ContentType = ReturnExtension(file.Extension.ToLower()); 

      // Write the file into the response 
      //Response.TransmitFile(file.FullName); 
      Response.WriteFile(file.FullName); 

      // End the response 
      Response.End(); 
     } 
     else 
     { 
      this.Response.Write("Error in finding file. Please try again."); 
      this.Response.Flush(); 
     } 
    } 
    catch (Exception ex) 
    { 
     this.Response.Write(string.Format("Error: {0}", ex.Message)); 
    } 
} 



private string ReturnExtension(string fileExtension) 
{ 
    switch (fileExtension) 
    { 
     case ".htm": 
     case ".html": 
     case ".log": 
      return "text/HTML"; 
     case ".txt": 
      return "text/plain"; 
     case ".doc": 
      return "application/ms-word"; 
     case ".tiff": 
     case ".tif": 
      return "image/tiff"; 
     case ".asf": 
      return "video/x-ms-asf"; 
     case ".avi": 
      return "video/avi"; 
     case ".zip": 
      return "application/zip"; 
     case ".xls": 
     case ".csv": 
      return "application/vnd.ms-excel"; 
     case ".gif": 
      return "image/gif"; 
     case ".jpg": 
     case "jpeg": 
      return "image/jpeg"; 
     case ".bmp": 
      return "image/bmp"; 
     case ".wav": 
      return "audio/wav"; 
     case ".mp3": 
      return "audio/mpeg3"; 
     case ".mpg": 
     case "mpeg": 
      return "video/mpeg"; 
     case ".rtf": 
      return "application/rtf"; 
     case ".asp": 
      return "text/asp"; 
     case ".pdf": 
      return "application/pdf"; 
     case ".fdf": 
      return "application/vnd.fdf"; 
     case ".ppt": 
      return "application/mspowerpoint"; 
     case ".dwg": 
      return "image/vnd.dwg"; 
     case ".msg": 
      return "application/msoutlook"; 
     case ".xml": 
     case ".sdxl": 
      return "application/xml"; 
     case ".xdp": 
      return "application/vnd.adobe.xdp+xml"; 
     case ".jar": 
      return "application/java-archive"; 
     default: 
      return "application/octet-stream"; 
    } 
} 

MISE À JOUR:

J'ajouté le type

case ".jar": 
    return "application/java-archive"; 

Et cela ne résout pas le problème. Si j'ai compressé le fichier .jar, il a pu être transmis correctement.

J'ai remarqué que lorsque j'ai testé mon fichier localist, le fichier a été téléchargé sans problème. Cependant, quand je le pousse sur le serveur web, c'est quand j'ai le problème.

Répondre

4

Je ne vois pas de cas pour ".jar" dans la fonction ReturnExtension() (qui, je pense, pourrait être mieux nommé "ReturnMimetype"). Cela pourrait-il être le problème, ou avez-vous simplement oublié de le coller?

Le type de fichier .jar est supposé être application/java-archive. Détails ici: http://en.wikipedia.org/wiki/Jar-file

Je pense que c'est le problème. Je me souviens avoir le même type de problème quand j'ai transmis un fichier .docx (qui est en fait un fichier zip avec une extension différente, en tant que fichiers .jar). Le téléchargement a bien fonctionné dans IE, mais Firefox l'a corrompu. La solution consistait à envoyer le type MIME correct.

1

Je ne vois que deux choses, il ne semble pas que vous ayez un type mime pour l'extension de fichier .jar. Deux J'utilise personnellement writefile plutôt que de transmettre, mais je ne suis pas sûr de la différence.

+0

TransmitFile est plus doux pour le serveur avec des fichiers plus volumineux: http://www.ddj.com/windows/202804466 – Kev

+0

Kev - merci beaucoup pour ce lien de super informations! –

1

Utilisez Response.WriteFile ou Response.BinaryWrite, il existe des comportements étranges connus avec la méthode TransmitFile.

+0

Une chance pour un lien documentant ces comportements étranges connus? Faire une recherche rapide sur Google n'a rien trouvé de pertinent. – ckittel

+0

@ckittel - Je ne sais pas si ça s'applique encore - il y a un certain temps. Je me souviens seulement de l'avoir trouvé à la longue queue de beaucoup de recherches, et le problème similaire que j'avais était corrigé par l'abandon de TransmitFile. – seanb