Ответ
multipart/form-data — это тип содержимого (Content-Type) для кодирования данных HTML-форм при отправке через HTTP. Он позволяет передавать в одном запросе как текстовые поля, так и бинарные файлы (изображения, документы и т.д.).
Как это работает:
Запрос разбивается на несколько «частей» (parts), разделённых уникальной строкой-границей (boundary). Каждая часть содержит свои заголовки (например, Content-Disposition с именем поля) и тело с данными.
Пример отправки файла и текста в Flutter/Dart с пакетом http:
import 'package:http/http.dart' as http;
Future<void> uploadImage(String imagePath, String description) async {
var request = http.MultipartRequest(
'POST',
Uri.parse('https://api.example.com/upload'),
);
// Добавляем файл
request.files.add(
await http.MultipartFile.fromPath(
'image', // Имя поля формы
imagePath,
contentType: MediaType('image', 'jpeg'),
),
);
// Добавляем текстовое поле
request.fields['description'] = description;
try {
final response = await request.send();
if (response.statusCode == 200) {
print('Файл успешно загружен');
} else {
print('Ошибка: ${response.statusCode}');
}
} catch (e) {
print('Ошибка сети: $e');
}
}
Когда использовать:
- Загрузка файлов на сервер.
- Отправка форм, содержащих смешанные данные (текст + файлы).
- Реализация API, аналогичного поведению HTML-формы с атрибутом
enctype="multipart/form-data".