2010-11-11 5 views
14

Ho un endpoint di caricamento standard a Jersey:Come ottenere il tipo MIME di file caricato a Jersey

@POST 
@Secure 
@Consumes("multipart/form-data") 
public Response upload(@Context final HttpHeaders hh, 
      @FormDataParam("fileaaa") final FormDataContentDisposition disposition, 
      @FormDataParam("fileaaa") final InputStream input, 

Come posso ottenere il tipo MIME del file caricato?

Se faccio disposition.getType questo mi ottiene il tipo MIME del modulo; in questo caso form-data.

So che l'informazione è lì da qualche parte; il messaggio HTTP dovrebbe essere qualcosa di simile:

-----------------------------7d01ecf406a6 
Content-Disposition: form-data; name="input_text" 

mytext 

-----------------------------7d01ecf406a6 
Content-Disposition: form-data; name="fileaaa"; 
filename="C:\Inetpub\wwwroot\Upload\pic.gif" 
Content-Type: image/gif 

(binary content) 
-----------------------------7d01ecf406a6-- 

risposta

28

Ho risolto questo lasciando Jersey iniettare un parametro BodyPart nel mio metodo. getMediaType() sulla parte del corpo mi dà quello di cui avevo bisogno:

@POST 
@Secure 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response upload(/*other parms */, @FormDataParam("fileaaa") final FormDataBodyPart body) { 
    String mimeType = body.getMediaType().toString(); 
    //handle upload 
} 
+1

Riportare qui una domanda morta, ma come hai fatto? Sto incontrando lo stesso problema (stavo cercando di usare URLConnection.guessContentTypeFromStream ma sembra fallire sui file di testo), e quando aggiungo un param iniettato del modulo [@FormDataParam ("my_file") BodyPart body], si ottiene impostato su null. – Arkaaito

+0

@Arkaaito Non l'ho toccato da un po ', ma hai guardato i parametri MultiPart per il tuo endpoint? Non è necessario anteporre il prefisso a FormDataParam ed è possibile ottenere le parti del corpo da quello. –

+7

Commento di BigRedBettaFish: "Solo una nota alla risposta accettata, per ottenere BodyPart, è possibile utilizzare: ' @FormDataParam ("my_file") Corpo FormDataBodyPart' Quindi è possibile utilizzare 'body.getMediaType()' " –