2010-11-11 35 views
14

Tôi có một endpoint tải lên chuẩn ở Jersey:Làm thế nào để có được MIME loại tập tin tải lên trong Jersey

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

Làm thế nào tôi có thể nhận được các kiểu MIME của tập tin tải lên?

Nếu tôi làm disposition.getType điều này sẽ cho tôi loại MIME của biểu mẫu; trong trường hợp này là form-data.

Tôi biết thông tin có ở đâu đó; thông báo HTTP phải giống như sau:

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

Trả lời

28

Tôi đã giải quyết điều này bằng cách cho phép Jersey tiêm tham số BodyPart vào phương pháp của tôi. getMediaType() trên phần nội dung cung cấp cho tôi những gì tôi cần:

@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

Phục hồi câu hỏi đã chết tại đây, nhưng bạn đã làm như thế nào? Tôi đang gặp phải vấn đề tương tự (đã cố gắng sử dụng URLConnection.guessContentTypeFromStream nhưng có vẻ như không thành công trên các tệp văn bản) và khi tôi thêm một tham số được tiêm của biểu mẫu [@FormDataParam ("my_file") BodyPart body], nó chỉ được đặt thành null. – Arkaaito

+0

@Arkaaito Tôi đã không chạm vào điều này trong một thời gian, nhưng bạn đã xem xét các thông số MultiPart cho điểm cuối của mình chưa? Bạn không cần tiền tố nó với FormDataParam và bạn có thể lấy các phần thân từ đó. –

+7

Nhận xét của BigRedBettaFish: "Chỉ cần ghi chú cho câu trả lời được chấp nhận, để lấy BodyPart, bạn có thể sử dụng: ' @FormDataParam ("my_file") FormDataBodyPart body' Sau đó, bạn có thể sử dụng 'body.getMediaType()' " –

Các vấn đề liên quan