Ответ
Стандартным и наиболее распространенным способом отправки файлов через REST API является использование HTTP-метода POST или PUT с Content-Type: multipart/form-data.
Этот подход позволяет передавать бинарные данные (файл) вместе с метаданными (например, имя пользователя, описание файла) в одном запросе.
Ключевые моменты:
- HTTP-метод: Чаще всего
POSTдля создания нового ресурса (файла). - Заголовок
Content-Type: Устанавливается вmultipart/form-data. - Тело запроса: Форматируется как набор "частей" (parts), где каждая часть имеет свои заголовки и данные. Одна часть содержит файл, другие — текстовые поля.
Пример на Python с библиотекой requests
Этот код демонстрирует отправку файла report.xlsx вместе с дополнительным полем report_type.
import requests
# URL эндпоинта на сервере для загрузки файлов
url = 'https://api.example.com/upload'
# Путь к файлу, который нужно отправить
file_path = 'reports/report.xlsx'
# Дополнительные данные для отправки
form_data = {'report_type': 'monthly'}
# Файл открывается в бинарном режиме для чтения ('rb')
with open(file_path, 'rb') as f:
# 'file' - это имя поля, которое ожидает сервер
files = {'file': (f.name, f, 'application/vnd.ms-excel')}
# Отправка запроса
response = requests.post(url, data=form_data, files=files)
print(f"Статус-код: {response.status_code}")
print(f"Ответ сервера: {response.json()}")
Альтернативы
- Base64-кодирование: Файл кодируется в строку Base64 и вставляется в тело JSON-запроса. Это увеличивает размер данных примерно на 33% и требует декодирования на сервере.
- Raw binary: Отправка файла как есть в теле запроса с соответствующим
Content-Type(например,image/png). Этот метод не позволяет передавать метаданные вместе с файлом.