2016-10-16 2 views
0

안녕하세요, 저는 PHP 서버에 okhttp3의 다중 요청을 사용하여 jpg 파일을 업로드하려고합니다. 스크립트는 $ _FILES [ "image1"]을 확인하고 HTML 양식에서 올바르게 작동합니다. 아래 코드를 사용하면 서버에서 Null 응답을받습니다.okhttp3 Null Respone 업로드 파일

파일 업로드 부분이 포함 된 마지막 addFormDataPart를 제거하면 image1이 설정되지 않은 서버로부터 응답을받습니다.

편집 * 부울 b = files.get (0) .isFile(); 내 휴대 기기에 저장된 파일은 false를, 드롭 박스의 파일은 true를 반환합니다. 보관 용 파일은 전화에서 올바른 응답 파일을 반환하지만 여전히 null http 응답을 반환합니다. 어떤 제안?

public AsyncHttpPost(String id, String password, List<File> files, OnTaskComplete listener) { 
    MediaType MEDIA_TYPE_JPG = MediaType.parse("image/jpg"); 
    MultipartBody.Builder builder = new MultipartBody.Builder() 
      .setType(MultipartBody.FORM) 
      .addFormDataPart(ResponseDTO.TAG_ID, String.valueOf(id)) 
      .addFormDataPart(ResponseDTO.TAG_PASSWORD, password) 
      .addFormDataPart("image1", "Test.jpg", RequestBody.create(MEDIA_TYPE_JPG, files.get(0))); 

    mRequestBody = builder.build(); 
    mListener = listener; 
} 

public AsyncHttpPost() { 
} 

public void setListener(OnTaskComplete listener){ 
    mListener = listener; 
} 

@Override 
protected String doInBackground(String... params) { 
    String result = ""; 

    OkHttpClient client = new OkHttpClient(); 

    Request request = new Request.Builder() 
      .url(params[0]) 
      .post(mRequestBody) 
      .build(); 



    Response response = null; 
    try { 
     response = client.newCall(request).execute(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     if(response != null) { 
      result = response.body().string(); 
     }else{ 
      result = "null"; 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

답변

0

URI 경로 isFile()을 사용하면 false가 반환됩니다. 그래서 아래와 같이 경로를 사용하여 파일을 생성해야했습니다. 이것은 몇 초 후에 널 응답으로 이어 지므로 HTTP 클라이언트의 시간 초과 값도 업데이트했습니다.

File f = new File(uri.getPath()); //didnt work 
File f = new File("/storage/emulated/0/DCIM/Camera/Test.jpg"); 

    OkHttpClient client = new OkHttpClient.Builder() 
      .connectTimeout(10, TimeUnit.SECONDS) 
      .writeTimeout(300, TimeUnit.SECONDS) 
      .readTimeout(30, TimeUnit.SECONDS) 
      .build(); 
관련 문제