2012-10-21 3 views
0

Android의 Jersey 클라이언트 API를 사용하여 Multipart-form-data POST 요청에 문제가 있습니다. 필자는 웹에서 다양한 예제를 따라 왔으며 구현과 관련하여 모두 비슷합니다.저지 클라이언트 + 멀티 파트 양식 데이터 + MessageBodyWriter 문제

Client client = createClientInstance(); 
WebResource r = client.resource(BASEURL).path("DataUpload"); 
ClientResponse post; 
try { 
    FormDataMultiPart multiPart = new FormDataMultiPart(); 
    multiPart.field("account", account); 
    multiPart.field("checksum", checksum); 
    multiPart.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE)); 
    post = r.type(MediaType.MULTIPART_FORM_DATA) 
     .accept(MediaType.TEXT_PLAIN) 
     .post(ClientResponse.class, multiPart); 

} catch (ClientHandlerException e) { 
    Log.e(TAG, e.getLocalizedMessage()); 
} finally { 
    client.destroy(); 
} 

내 장치에서이 코드를 실행 는, 나는 예외 제시하고있다 :

javax.ws.rs.WebApplicationException: java.lang.IllegalArgumentException: No MessageBodyWriter for body part of type 'java.io.File' and media type 'application/octet-stream' 

나는 뉴저지는 여분의 구성없이 파일 객체를 처리 할 줄 알았는데. 바디 라인을 제거하면 Jersey가 요청을 할 수있게되지만 그 점이 제거됩니다.

  • 저지 - 클라이언트 1.14
  • 저지 코어 - 1.14
  • 저지 - 다중 - 1.14
  • :

    나는 (메이븐으로 뽑아되었다) 내 buildpath 이러한 라이브러리가 mimepull-1-6 나는 시도하는 두 가지 제안 할 수 있습니다

+0

http://stackoverflow.com/questions/9710953/trasferring-files-and-data-with-jersey가 도움이 될까요? – smk

+0

내 문제는 안드로이드에 의한 Jersey 클래스의 부적절한 로딩과 관련이있는 것으로 보입니다. 나는 [여기] (http://stackoverflow.com/questions/9342506/jersey-client-on-android-nullpointerexception/10676918#10676918)에 나열된 해결 방법을 사용했지만 모든 솔루션을로드하지 않았기 때문에 그 해결책은 불완전했습니다. 내 응용 프로그램에 필요한 수업. [원래 나열된 전체 클래스] (http://jersey.576304.n2.nabble.com/java-lang-NullPointerException-on-Android-tt4212447.html#a5459910)를 추가하면 파일 업로드. – KC89

답변

0

:

을 아마도 (

multiPart.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));

  • 는 다중 몸 작가에 대한 클라이언트 설정을 말씀 :

    1. 저지가가 기본값으로 행복 MIME 형식을 찾을 수 있는지 확인하기 위해 FileDataBodyPart 건설에서 MIME 형식을 제거) 당신의 createClientInstance() 방법 내부 : 도움이

      com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig(); 
      config.getClasses().add(MultiPartWriter.class); 
      client = Client.create(config); 
      

    희망.

  • 관련 문제