2010-02-11 7 views
7

Dans mon application, j'aime fournir un service de téléchargement de fichiers. J'ai défini les types de fichiers sur response.setContentType. Comment puis-je définir les types de contenu pour presque tous les types de fichiers connus? Y a-t-il un moyen facile? ou je dois le régler manuellement comme je le fais maintenant, ce qui est indiqué ci-dessous.réglage du type de contenu en java pour le téléchargement de fichiers

if (pictureName.indexOf("jpg") > 0) { 
    res.setContentType("image/jpg"); 
} else if (pictureName.indexOf("gif") > 0) { 
    res.setContentType("image/gif"); 
} else if (pictureName.indexOf("pdf") > 0) { 
    res.setContentType("application/pdf"); 
    res.setHeader("Content-Disposition", "inline; filename=\"" + pictureName + "\""); 
} else if (pictureName.indexOf("html") > 0) { 
    res.setContentType("text/html"); 
} else if (pictureName.indexOf("zip") > 0) { 
    res.setContentType("application/zip"); 
    res.setHeader("Content-Disposition", "attachment; filename=\"" + pictureName + "\""); 
} 

Merci :)

+0

Votre conteneur (par exemple Tomcat) fournit généralement cette logique, par exemple http: // www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME - souhaitez-vous remplacer cela? – Pool

+1

Bonne question. Suggestion: Ne dites pas "s'il vous plaît aider". Les gens sont là pour aider (et pour apprendre des questions des autres ainsi que les leurs), pas besoin d'appuyer sur le point. J'ai vu des gens (de façon inappropriée, à mon avis!) En fait, déprécier les gens juste pour avoir dit "S'il vous plaît aider" et autres. Bizarre mais vrai. –

+2

Hors sujet: Ce code est un peu fragile, n'est-ce pas? Que se passe-t-il si 'pictureName' est" gifford.pdf "? –

Répondre

9

un coup d'oeil à javax.activation.MimetypesFileTypeMap (vient dans le cadre de java6, peut être téléchargé version antérieure). Il a une méthode qui retourne le type mime pour un nom de fichier donné.

Je n'ai jamais essayé de l'utiliser moi-même, cependant, et il est possible que vous deviez toujours le fournir avec une liste de types MIME. Cela vaut le coup d'oeil, cependant.

+1

testé sur mon Mac OS X 10.5.8, Java 1.6.0_17, nouvelle MimetypesFileTypeMap() getContentType (nom de fichier) produit ces résultats: image x.jpg/jpeg, l'image x.jpeg/jpeg, x. gif image/gif, x.pdf application/octet-stream, x.html text/html, Application x.xip/flux d'octets. [Acquittement, mauvais formatage en tant que commentaire. Dois-je poster ceci comme une réponse séparée, ou quelqu'un qui peut le mettre dans celui-ci?] –

+0

@Kevin: Je ne suis pas sûr, soutenez-vous ma réponse, ou en désaccord avec elle? :) – skaffman

+0

Essayer de fournir des données sur le fonctionnement de cette solution. Pas d'opinion, vraiment. –

0

URLConnection.getFileNameMap().getContentTypeFor(string) fonctionne pour txt, pdf, avi; échoue pour doc, odt, mp3 ...

1

Pour donner un exemple concret de ce que @skaffman énumérés lors de l'utilisation d'un Servlet:

 String fileName = "c:/temp/URL.txt"; 
     MimetypesFileTypeMap mimetypesFileTypeMap=new MimetypesFileTypeMap(); 
     response.setContentType(mimetypesFileTypeMap.getContentType(fileName)); 
     response.getOutputStream().write(Files.readAllBytes(Paths.get(fileName)));