2010-11-11 21 views
14

J'ai un point de terminaison de téléchargement standard à Jersey:Comment obtenir le type MIME du fichier téléchargé à Jersey

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

Comment puis-je obtenir le type MIME du fichier téléchargé? Si je fais disposition.getType cela me donne le type MIME du formulaire; dans ce cas form-data.

Je sais que l'information est là quelque part; le message HTTP doit être quelque chose comme:

-----------------------------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-- 

Répondre

28

Je résolu ce problème en laissant Jersey injecter un paramètre BodyPart dans ma méthode. getMediaType() sur la partie du corps me donne ce dont j'avais besoin:

@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

Ressusciter une question morte ici, mais comment avez-vous fait cela? Je rencontre le même problème (j'essayais d'utiliser URLConnection.guessContentTypeFromStream mais il semble échouer sur les fichiers texte), et quand j'ajoute un paramètre injecté de la forme [@FormDataParam ("my_file") BodyPart body], on obtient juste mettre à null. – Arkaaito

+0

@Arkaaito Je n'ai pas touché à cela depuis un moment, mais avez-vous regardé les paramètres MultiPart pour votre point de terminaison? Vous n'avez pas besoin de le préfixer avec FormDataParam et vous pouvez obtenir les parties du corps à partir de cela. –

+7

Commentaire de BigRedBettaFish: "Juste une note à la réponse acceptée, pour obtenir le BodyPart, vous pouvez utiliser: ' @FormDataParam ("mon_fichier") FormDataBodyPart body' Ensuite, vous pouvez utiliser 'body.getMediaType()' " –