Im заканчивает этот проект, который использует okhttp для связи с webservice.Загрузка файла с помощью okhttp
Все идет нормально для обычных GET и POST, но я не могу правильно загрузить файл.
Документы okhttp очень не хватает по этим предметам, и все, что я нашел здесь или где-то, похоже, не работает в моем случае.
Это должно быть просто: мне нужно отправить как файл, так и некоторые строковые значения. Но я не могу понять, как это сделать.
После некоторых образцов, которые я нашел, я впервые попробовал это:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart("group", getGroup())
.addFormDataPart("type", getType())
.addFormDataPart("entity", Integer.toString(getEntity()))
.addFormDataPart("reference", Integer.toString(getReference()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
Это дает мне ошибку «400 плохой запрос».
Так что я попытался это из okhttp рецептов:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
Тот же результат.
Не знаю, что еще попробовать или что задумать, чтобы отладить это.
Запрос делается с этим кодом:
// adds the required authentication token
Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
Response response = client.newCall(request).execute();
Но Im уверен, что проблема заключается в том, как Im построения тела запроса.
Что я делаю неправильно?
EDIT: «getFile()» выше возвращает объект File, кстати. Остальными параметрами являются все строки и ints.
спасибо diogo.abdalla, это разбудило меня .. –
У меня была та же проблема ... интересно, почему Рецепты предлагают использовать «addPart» с «Headers.of». – Jsm
Что делает функция getFile()? Дано ли это для пути изображения? –