Передать файл (изображение) в переменную через POST в Retrofit 2

Здравствуйте. Как передать файл(jpeg, png, jpg) в переменную через POST в Retrofit 2 ? Есть такой запрос: Запрос со скриншота выше нормально отрабатывает в Postman. В приложении есть возможность вместе с другими данными отправить и файл. Если не отправляю файл, то использую такой код: @FormUrlEncoded @POST(«create_user») Call addUser(@Query(«token») String token, @FieldMap Map params);
Map params = new HashMap<>(); params.put("user_id", какое-то_значение); params.put("login", какое-то_значение); params.put("password", какое-то_значение); ApiController.addUser(getToken(getActivity()), params);
Этот код отрабатывает нормально. То есть, если пользователь не отправляет файл, то все работает. Подскажите, пожалуйста, что нужно доделать, чтобы была возможность отправить файл. Раньше переделывал изображение в base64 и как строку вставляли её в одно из полей в запросе. Но теперь нужно сделать запрос именно так как на скриншоте в Postman.
Отслеживать
задан 31 янв 2017 в 23:04
21 5 5 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ссылку от пользователя pavel163 я видел раньше. Но ночью не заметил переключение пунктов. Ответ оказался в подпункте Passing Multiple Parts Along a File with @PartMap. В статье советовали использовать FileUtils, но обошёлся без него. Ниже привожу используемый мной код.
Методы из вопроса были заменены на следующие:
@Multipart @POST("create_user") Call addUser(@Query("token") String token, @PartMap() Map partMap, @Part MultipartBody.Part file); File file = new File(mFilePath); MultipartBody.Part body = ApiUtils.prepareFilePart(getActivity(), "image", file); RequestBody login = createPartFromString(mEdtLogin.getText().toString()); RequestBody password = createPartFromString(mEdtPassword.getText().toString()); RequestBody userId = createPartFromString(mUserId + ""); HashMap params = new HashMap<>(); params.put("login", login); params.put("password", password); params.put("user_id", userId); ApiController.addUser(PreferencesUtils.getToken(getActivity()), params, body);
Допольно использовались методs createPartFromString() и prepareFilePart(). Ниже код:
private RequestBody createPartFromString(String descriptionString) < return RequestBody.create( okhttp3.MultipartBody.FORM, descriptionString); >@NonNull public static MultipartBody.Part prepareFilePart(Context context, String partName, File file) < String mimeType = URLConnection.guessContentTypeFromName(file.getName()); RequestBody requestFile = RequestBody.create(MediaType.parse(mimeType),file); // MultipartBody.Part is used to send also the actual file name return MultipartBody.Part.createFormData(partName, file.getName(), requestFile); >
Как пользоваться программой Postman

Программа Postman предназначена для тестирования работы API, а также для отправки запросов POST и GET. В отличие от похожей утилиты curl, она имеет графический интерфейс, поэтому легко осваивается даже новичками.
Скачать ее можно с официального сайта – есть дистрибутивы для Windows, macOS и Linux. На последней платформе есть возможность установки утилиты напрямую из Центра приложений. В любом случае использование начинается с регистрации бесплатного аккаунта.
Как тестировать API
Тестирование интерфейса API проводится путем анализа точности выходных данных в зависимости от подаваемых при входном запросе. Этим и занимается Postman: он составляет и отправляет их на указанные URL, получает обратно и сохраняет в базе данных. При желании возможно сохранение типовых запросов в коллекции (для быстрого доступа) и создание для них разного окружения.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Интерфейс приложения Postman
Главное окно программы разделено на четыре области. Разделение на блоки идет по функционалу, что заметно упрощает настройку и управление. Если опыта работы с такими утилитами нет, рекомендуется не трогать непонятные пункты, а пользоваться только простыми (их мы и рассмотрим).

- Верхняя панель – здесь расположены основные настройки программы.
- Боковая панель – сюда выделены запросы, выполненные ранее или сохраненные в качестве «избранного».
- Панель вкладок – инструмент переключения между разными запросами.
- Рабочая область – все базовые настройки отправленного запроса, перечень возвращаемых по нему данных.
Выполнение запроса
Выполнение простого запроса, без сохранения в коллекции, осуществляется кликом по кнопке со значком . В результате откроется новая вкладка, где есть возможность выбрать тип запроса (GET или POST) и внести домен, который будет открываться. Остается нажать на кнопку Send, которая и запустит процедуру проверки.

В нижней части страницы появится код страницы (HTML). Здесь имеется несколько вкладок:
- Body – данные, содержащиеся в теле запроса.
- Cookie – информация, записанная сервером.
- Headers – заголовки, которые были возвращены.
На первой вкладке, где отображается тело запроса, есть выбор нескольких вариантов отображения. Так, Pretty интересна для получения JSON-данных – программа отформатирует их в достаточно удобном формате. Если выбрать режим Raw, информация будет представлена «как есть», без каких-либо изменений. Вкладка Preview отображает сайт в том виде, в котором он открывается в браузере.
Передача параметров в Postman
В программу встроен собственный сервис API, который и используется для тестирования внешних ресурсов. Чтобы обратиться к нему, следует кликнуть на «плюсик», выбрать из выпадающего списка тип запроса GET, а вместо домена вставить ссылку на сервис https://postman-echo.com/get.

Затем нужно открыть вкладку Params и в разделе Query Params под строкой Key внести название отправляемого параметра. Следом под строкой Value нужно написать еще одно значение. Количество не ограничено – пользователь вносит столько параметров, сколько ему нужно для тестирования конкретного API.
Остается нажать на кнопку Send и получить ответ на отправленные запросы. Чтобы потом параметры не задействовались при тестировании реально существующих веб-ресурсов, достаточно снять с них галочки. Это укажет программе, что нужно отправлять запросы без учета внесенных параметров.
Передача параметров формы и заголовков
В отличие от GET, запрос POST передается не в ссылке на сайт, а в теле запроса. Чтобы проверить работоспособность программы, используется обращение к адресу https://postman-echo.com/post. Во время настройки на вкладке Body нужно включить режим form-data, затем внести схожие параметры и нажать на кнопку Send.

Если взаимодействие по API требует передачи токенов авторизации, понадобится привлечь к этому HTTP-заголовки. Такой формат работы используется, например, в движке Xenforo, написанном на PHP для развертывания форумов. Для передачи в заголовке какой-либо информации нужно зайти на вкладку Headers и добавить любое имя со значением (на выбор пользователя). После отправки информации внизу окна будет отображен ответ сервера.
Передача файла в Postman
Программа Postman позволяет отправлять файлы, а не только текстовые данные, как в приведенных выше примерах. Чтобы сделать это, достаточно перейти на вкладку Body, зайти в раздел form-data и выбрать тип параметра File (вместо Text).

Затем следует нажать на кнопку Select File и выбрать отправляемый файл. После отправки данных на сервер он будет виден в секции files. Ничего сложного в процедуре нет, приведенная выше схема работает со всеми типами файлов.
Авторизация Basic Auth
Если на сайте используется защита с авторизацией по методу Basic Auth, программа Postman дает возможность проверить ее прохождение. В качестве примера обращение будет осуществляться по адресу https://postman-echo.com/basic-auth. Чтобы пройти проверку, понадобится отправить значение имени пользователя postman и пароль доступа password.

Далее в рабочей области надо открыть вкладку Authorization, в разделе Type выбрать значение Basic Auth и заполнить имя с паролем. Если процедура пройдена успешно, тестовый сервер вернет ответ authenticated: true.
История и коллекция запросов
При систематическом использовании одних и тех же запросов будет проще отправлять их из заранее составленного списка. Программа Postman упрощает задачу за счет сохранения истории, в которой содержатся все внесенные параметры. Пользователю лишь остается кликнуть по нужному пункту и при необходимости заменить URL.

Наиболее важные запросы рекомендуется сохранять в коллекции. Чтобы сделать это, достаточно нажать на кнопку New на верхней панели, выбрать пункт Collection и ввести название (на выбор пользователя). Теперь любой запрос будет добавлен в перечень нажатием на кнопку Create и, после заполнения всех данных, кнопку Save (до отправки на сервер).
Как отправить файл в postman
Вы можете использовать Postman для отправки запросов API. Для этого установите приложение Postman или зарегистрируйтесь в веб-версии. Подробно о том, как работать с Postman читайте в Postman Support Center.
Импорт коллекции методов
После авторизации импортируйте коллекцию методов нашего API:
- Скачайте коллекции по ссылкам.
- Откройте Postman. Выберите меню — File — Import.
- Откроется окно Import. Нажмите кнопку Upload Files.
- Выберите скаченные файлы с коллекциями API Bot.one и нажмите Открыть.
- Выбранные файлы отобразятся в таблице. Нажмите Import.
В результате коллекция будет загружена в Postman, методы появятся на панели слева.
Отправка запроса
Теперь все доступные методы доступны у вас в Postman. Отправить запрос очень просто.
- Выберите метод на боковой панели.
- Справа появится запрос и его параметры.
- В строке запроса на месте > введите адрес вашего инстанса, например: manual.bot.one .
- Запрос также может содержать другие параметры в заголовке, без которых он не будет отправлен. Такие параметры выделены цветом и фигурными скобками > . Добавьте на место скобок нужные данные.
- На вкладке Params перечислены все параметры, которые могут быть добавлены в query запроса. Эти параметры могут быть обязательными или необязательными. Вкладка может совсем не иметь параметров — значит, запрос их не требует. Для добавления параметра в запрос, установите флаг и введите значение в столбце VALUE. Если вы передумали указывать значение параметра, снимите флаг — иначе запрос не будет отправлен.
- На вкладке Auth укажите параметры авторизации. Без них запрос не будет отправлен. В Type выберите Basic Auth и введите логин (email) и пароль вашего аккаунта Bot.one в полях Username и Password.
- Некоторые методы предполагают отправку JSON в теле запроса. Для этого перейдите на вкладку Body, выберите в поле слева тип данных raw, а справа — JSON. Впишите json или измените данные в уже написанном.
- Теперь запрос готов к отправке. Нажмите кнопку Send.

Figure 1. Запрос в Postman
Запрос будет отправлен на сервер с теми параметрами, которые вы указали. В нашем API вы работаете с реальными данными, поэтому все изменения отобразятся на вашем инстансе: если запрос должен начать диалог, то при успешном запросе диалог будет начат и добавлен на сервер.
Полученный ответ появится в нижней части страницы. Вы увидите код ответа и его содержимое. При успешном запросе в ответе вернуться данные, при неуспешном — описание ошибки, которое поможет вам исправить запрос, чтобы отправить его заново.
Postman: как пользоваться программой для тестирования API
Бесплатный сервис позволяет писать тесты, поддерживает разные типы API.

Виктория Дербенченко
Автор статьи
4 марта 2022 в 11:52
Postman — программа, которая проверяет работу API с помощью запросов. Они могут содержать файлы, cookie, HTTP-заголовки, параметры форм. В статье покажем основные бесплатные функции программы и расскажем о нескольких простых действиях, которые можно в ней выполнять.
Как пользоваться Postman
Скачайте бесплатную версию Postman с официального сайта. Приложение адаптировано для Windows, MacOS и Linux.
Не забудьте создать личный аккаунт, чтобы синхронизировать все устройства, в которых вы работаете над проектом. Так вы не потеряете важные данные.
В статье будем использовать бесплатный сервис Placeholder. Он предоставляет бесплатный API с фейковыми данными, чтобы тестировать приложения.
Инженер-тестировщик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Интерфейс
Главное окно состоит из четырех рабочих блоков:
- основное меню;
- сайдбар;
- выбор типа запроса и сам URL;
- рабочая область.
Как выполнить запрос
В Postman запросы — основная рабочая единица. Чтобы выполнить запрос, нажмите «+» и выберите его тип. Например: «основной — GET». После укажите URL в адресной строке и щелкните Send.
Как передавать параметры
Чтобы проверить передачу параметров, используйте онлайн-сервис postman-echo.
GET-параметры
Нажмите «+», чтобы создать новый запрос → в поле запроса пропишите https://postman-echo.com/get → метод GET.
GET-параметры указывают в разделе Params. Откройте этот раздел под строкой запроса и наберите название параметра в графе Key (например, Foo), а его значение — в Value (например, Bar). Теперь кликните Send и смотрите результат.
Параметры формы
Параметры формы передаются с помощью POST-запросов. Нажмите «+» → POST → в адресную строку добавьте https://postman-echo.com/post. В теле запроса (Body) выберите вкладку form-data и заполните необходимые поля → отправьте (Send).
Передача файла
Для этого в form-data поменяйте тип параметра с Text на File. Полученный ответ будет храниться в разделе Files.
Заголовки
Чтобы отправить данные в заголовке, перейдите в раздел Headers, затем введите сам заголовок и его значение.

Авторизация
Есть много методов и способов, чтобы зарегистрироваться и авторизоваться на сервере. Рассмотрим базовую схему авторизации. При такой схеме логин и пароль передаются в заголовке «Authorization» в незашифрованном виде. С помощью Postman можно убедиться, что протокол работает правильно и, главное, безопасно.
Поменяйте метод на GET. Откройте вкладку Authorization → Нажмите Type → Basic Auth. Введите имя пользователя — postman, пароль — password → Send. Если протокол авторизации работает корректно, сервер выдаст: authenticated: true.
Проверяем авторизацию Basic Auth
История запросов
Если некоторые запросы используете чаще других, необязательно раз за разом вводить новые данные. Можно воспользоваться списком в разделе History. Он хранит предыдущие запросы.
Коллекции запросов
Чтобы хранить запросы, есть специальные архивы — коллекции. Здесь можно структурировать, организовывать запросы, раскладывать по папкам, чтобы их было проще найти. Это полезно для средних и больших проектов.
Чтобы создать коллекцию: в разделе Collection нажмите «+» → дайте ей название → заполните запросами (Add request).
Как тестировать запросы
С помощью Postman можно отправлять запросы независимо от того, тестируете ли вы собственный API или интегрируетесь со сторонним. Запросы создают в конструкторе — главном рабочем пространстве программы. Вы можете проверить любые параметры — например, заголовки или cookie.
Запрос состоит из URL-адреса и HTTP-метода. Последний указывает тип действия, который запрашивается у API. Вот наиболее распространенные методы:
- GET — получить данные;
- POST — добавить новые данные;
- PUT — заменить данные, которые имеются;
- PATCH — обновить некоторые поля данных;
- DELETE — удалить данные.
Например, если вы тестируете API онлайн-планировщика дел, можете использовать: GET-метод — чтобы получить текущий список задач; POS — чтобы создать новую задачу; PUT или PATCH — чтобы редактировать существующую; DELETE — чтобы удалить задачу.
Правильно формулировать запросы с помощью Postman и других инструментов и создавать нагрузочные тесты для API можно научиться на курсе «Инженер по тестированию» в Skypro. За девять месяцев освоите все основные инструменты тестировщика и сможете устроиться на престижную и высокооплачиваемую работу.
GET-запросы
В качестве примера возьмем API:
Нажмите «+» → Выберите GET-запрос → Задайте URL-адрес https://jsonplaceholder.typicode.com/users → Send.

Если запрос выполнен корректно, в нижней панели появится надпись: «Status: 200 ОК».
POST-запросы
POST-запросы позволяют отправлять новую информацию. Например, данные о пользователе:
Кликните «+» → Выберите POST-запрос → Задайте URL-адрес https://jsonplaceholder.typicode.com/users → Перейдите в раздел Body → Выберите Raw > JSON → Введите данные пользователя → Send.
Если запрос выполнен корректно, вы увидите статус «201 Created».
