2010-09-16 4 views
3

j'ai le code suivantGrails - comment forcer fichier de téléchargement avec son extension

def fileDoc = new File(document.documentLocation); 
    if(fileDoc.exists()){ 
     // force download 
     def fileName = fileDoc.getName(); 
     response.setContentType("application/octet-stream") 
     response.setHeader "Content-disposition", "attachment; filename=${fileName}" ; 
     response.outputStream << fileDoc.newInputStream(); 
     response.outputStream.flush(); 
     return true; 
    } 

documentLocation contient la chaîne comme "c: \ mondoc \ contains_some_long_string_with_id.pdf" par exemple.

Je voudrais que l'utilisateur télécharge le fichier au lieu de le voir depuis le navigateur. Il fonctionne bien sur chrome où je pourrais télécharger et le fichier apparaîtra "enregistrer sous" "contains_some_long_string_with_id.pdf"

mais dans firefox (le dernier) .. le nom de fichier est paralysé à "contient_some_long" seulement (sans pdf extension à la fin).

Comment résoudre ce problème? le fichier pourrait être csv, pdf, texte, html, zip, pdf ou autre format de fichier.

merci

Répondre

1

La chaîne de type de contenu a probablement besoin d'abeille le type MIME du document que vous téléchargez.

par ex. pour le PDF il devrait probablement être "application/pdf"

+0

mais les utilisateurs peuvent mettre des fichiers avec n'importe quel format. cela fonctionne bien sur chrome mais sur le firefox le nom de fichier sera paralysé – nightingale2k1

+0

Votre code peut-il vérifier l'extension du fichier et définir le bon type de fichier au moment du téléchargement? Je pense que c'est peut-être la raison pour laquelle Firefox est en train de bousiller l'extension. Je pourrais toutefois avoir tord. –

1

Vous avez probablement des espaces ou des caractères spéciaux qui déroutent Firefox. Le nom de fichier doit être une chaîne entre guillemets:

response.setHeader "Content-disposition", "attachment; filename=\"${fileName}\""; 

Voir RFC 2616, section 19.5.1.

Questions connexes