okhttp3 Null Respone загружает файл

Привет, я пытаюсь загрузить файл jpg, используя составной запрос okhttp3 на сервер php. Скрипт проверяет наличие $_FILES["image1"] и корректно работает с html-формой. При использовании приведенного ниже кода я получаю нулевой ответ от сервера.

Если я удалю последний addFormDataPart, содержащий часть загрузки файла, я получу ответ от сервера, что изображение1 не установлено.

Изменить * я обнаружил, что логическое значение b = files.get(0).isFile(); возвращает false для файлов, хранящихся на моем мобильном устройстве, и true для файлов в Dropbox. Файлы Dropbox возвращают правильный ответный файл на телефоне, но по-прежнему возвращают нулевой 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;
}

person user2202098    schedule 16.10.2016    source источник


Ответы (1)


при использовании пути 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();
person user2202098    schedule 16.10.2016