2010-02-11 8 views
7

Nella mia applicazione mi piace fornire funzionalità di download di file. Ho impostato i tipi di file su response.setContentType. Come posso impostare i tipi di contenuto per quasi tutti i tipi di file conosciuti? C'è un modo semplice? o ho bisogno di impostarlo manualmente come faccio ora, che è indicato di seguito.impostazione del tipo di contenuto in java per il download del file

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 + "\""); 
} 

Grazie :)

+0

vostro contenitore (ad esempio Tomcat) di solito fornisce questa logica ad esempio http: // www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME - desideri ignorarlo? – Pool

+1

Buona domanda. Suggerimento: non dire "per favore aiuto". Le persone sono qui per aiutare (e per imparare dalle domande degli altri e anche dalle loro), non c'è bisogno di insistere sul punto. Ho visto persone (in modo inappropriato, secondo me!) In realtà mire le persone solo per aver detto "Per favore aiuto" e così via. Strano ma vero. –

+2

Off-topic: quel codice è un po 'fragile, non è vero? Cosa succede se 'pictureName' è" gifford.pdf "? –

risposta

9

diano un'occhiata al javax.activation.MimetypesFileTypeMap (si presenta come parte di java6, può essere scaricato per la versione precedente). Ha un metodo che restituisce il tipo mime per un determinato nomefile.

Non ho mai provato a utilizzarlo da solo, tuttavia, ed è possibile che sia ancora necessario fornirgli un elenco di tipi MIME. Vale la pena dare un'occhiata, però.

+1

testato sul mio Mac OS X 10.5.8, Java 1.6.0_17, nuova MimetypesFileTypeMap() getContentType (nome del file) produce questi risultati: immagine x.jpg/jpeg, x.jpeg image/jpeg, x. gif image/gif, x.pdf application/octet-stream, x.html text/html, x.zip application/octet-stream. [Ack, formattazione errata come commento. Devo postare questo come una risposta separata, o qualcuno che può modificare metterlo in questo?] –

+0

@ Kevin: Non sono sicuro, stai sostenendo la mia risposta, o in disaccordo con esso? :) – skaffman

+0

Cercando di fornire dati sul funzionamento di questa soluzione. Nessuna opinione, davvero. –

0

URLConnection.getFileNameMap().getContentTypeFor(string) funziona per txt, pdf, avi; fallisce per doc, odt, mp3 ...

1

Per dare un esempio di lavoro di ciò che @skaffman elencato quando si utilizza 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))); 
Problemi correlati