2013-01-04 3 views
10

Sto utilizzando Spring MVC3 per gestire il caricamento di file per la mia applicazione web. Per ora, posso limitare la dimensione del file caricato utilizzando la seguente configurazione definita nel mio file di contesto xml:Come limitare i tipi di file caricati al controller Spring MVC3

<beans:bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <beans:property name="maxUploadSize" value="200000"/> 
</beans:bean> 

ho perlustrato il web per come limitare il tipo di file, ma senza alcun risultato. La maggior parte degli articoli che ho trovato insegnano solo come limitare la dimensione del file e non il tipo di file. Grazie in anticipo per il vostro aiuto.

risposta

6

provare ad eseguire il controllo/routing nel metodo di richiesta del gestore del controller:

@RequestMapping("/save") 
public String saveSkill(@RequestParam(value = "file", required = false) MultipartFile file) { 
     if(!file.getContentType().equalsIgnoreCase("text/html")){ 
      return "normalProcessing"; 
     }else{ 
      return "redirect: /some/page"; 
     } 
} 
5

È limitare upload di file per tipo di file, è possibile estendere org.springframework.web.multipart.commons.CommonsMultipartResolver classe. E aggiungere il metodo per controllare il tipo di contenuto di file o il tipo di file utilizzando MultipartFile.

Fornire i tipi di file, quelli che si desidera limitare nella configurazione come -

<beans:bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <beans:property name="maxUploadSize" value="200000"/> 
    <beans:property name="restrictFileTypes" value="html,pdf,..."/> 
</beans:bean> 
+3

Chi avrebbe chiamare quel metodo che controlla il tipo di file? – user12458

+0

@JavaTechnical Questo è registrato come bean e il framework spring si prenderà cura di esso durante il caricamento del file. –

0

È inoltre possibile controllare il tipo MIME e secondo che è possibile limitare l'utente a caricare i file verranno utilizzate JMimeMagic Biblioteca Qui.

MagicMatch match = Magic.getMagicMatch(file.getBytes()); 
     System.out.println(match.getMimeType()); 
1

È possibile creare un metodo definito dall'utente per fare questo controllo:

String fileExtentions = ".exe,.dmg,.mp3,.jar"; 
fileName = multipartFile.getOriginalFilename(); 
int lastIndex = fileName.lastIndexOf('.'); 
String substring = fileName.substring(lastIndex, fileName.length()); 

e controllare le condizioni:

if (!fileExtentions.contains(substring)) 
    //logic 
else 
    //logic