2014-01-29 3 views
3

여기에서 수행하고 싶은 작업과 관련하여 스택 오버플로에 관한 거의 모든 질문을 보았습니다. 그러니 제발 날 도와 줘요.안드로이드 : 멀티 파트를 사용하는 동안 바이너리 사진이 전송되지 않았습니다.

일부 문자열을 따라 PHP 웹 응용 프로그램 서버로 이진 파일을 보내도록 작성한 코드는 다음과 같습니다.

public void doRegister(final String userEmail, final String userPass, final File userPhotoId) { 
    HttpClient myHttpClient = new DefaultHttpClient(); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       HttpPost registerTry = new HttpPost(Constants.oAuthRegURL); 
       MultipartEntity signupEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
       signupEntity.addPart("email", new StringBody(userEmail, Charset.forName("UTF-8"))); 
       signupEntity.addPart("password", new StringBody(userPass, Charset.forName("UTF-8"))); 
       signupEntity.addPart("User[profilePicture]", new FileBody(userPhotoId, "image/jpeg")); 
       registerTry.setEntity(signupEntity); 
       HttpResponse signupHttpResp = myHttpClient.execute(registerTry); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

파일 userPhotoId 작성 및 카메라 API를 통해 반환 된 사진 파일 (내가 얻는 데이터 &가 그 비트 맵 등의 파일 객체를 생성 그것에서 비트 맵을 생성하여 onActivityResult &에 카메라를 통해 반환)

그래서 여기의 문제는 사진이 서버로 이런 식으로 전송되지 않습니다. 내가 이런 파일 바디 섹션에 마임을 제거한다면, :

signupEntity.addPart("User[profilePicture]", new FileBody(userPhotoId)); 

바이너리 파일/사진이 제대로 전송됩니다. 하지만 난 바이너리 악성 코드를 방지하기 위해 들어오는 파일을 확인하는 웹 응용 프로그램에 필요한 보안으로 인해 엔티티 mimeType을 설정해야합니다. 그래서 아무도 왜 엔티티 요청에서 mimeType을 사용할 때 파일이 전송되지 않았는지 말할 수 있습니까?

p.s. 내 프로젝트의 libs에서 httpclient-4.3.2, httpmime-4.3.2, httpcore-4.3.1을 가져오고 SDK 19로 컴파일했습니다.

답변

5

OK 이제 막 알아 냈습니다. MultipartEntityBuilder에서 모든 것을 작성했습니다. 따라서 이진 사진을 보내는 것과 관련된 줄은 다음과 같습니다.

signupEntity.addBinaryBody("User[profilePicture]", userPhotoId, ContentType.create("image/jpeg"), ".profile.jpg");