2010-11-11 20 views
14

Mam standardowy punkt końcowy przesyłania w Jersey:Jak uzyskać typ MIME pliku przekazany w Jersey

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

Jak mogę uzyskać typ MIME przesyłanego pliku?

Jeśli wykonam disposition.getType, otrzymam informację o typie MIME formularza; w tym przypadku form-data.

Wiem, że informacje są gdzieś; komunikat HTTP powinno być coś takiego:

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

Odpowiedz

28

I rozwiązać ten pozwalając Jersey wstrzyknąć parametr BodyPart moim sposobem. getMediaType() na części ciała daje mi to, czego potrzebowałem:

@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

Wskrzeszanie martwego pytania tutaj, ale jak to zrobiłeś? Zdaję sobie sprawę z tego samego problemu (próbowałem użyć adresu URLConnection.guessContentTypeFromStream, ale wydaje się, że nie działa on w plikach tekstowych), a po dodaniu wstrzykniętego parametru formularza [@FormDataParam ("mój_plik") bodyPart body], po prostu dostaje ustawiona na null. – Arkaaito

+0

@Arkaaito Nie dotykałem tego od jakiegoś czasu, ale czy spojrzałeś na parametry MultiPart dla swojego punktu końcowego? Nie trzeba go poprzedzać FormDataParam i można uzyskać części ciała z tego. –

+7

Uwaga BigRedBettaFish: "Wystarczy notatkę do zaakceptowanej odpowiedzi, aby uzyskać BodyPart, możesz użyć: ' @FormDataParam ("my_file") FormDataBodyPart body' Następnie możesz użyć 'body.getMediaType()' " –