При интеграции 1С с облачными сервисами, такими как Google Drive, мы часто сталкиваемся с задачами автоматического создания структуры каталогов. Одной из частых проблем, с которой можно столкнуться при реализации этой задачи, является ошибка «Invalid multipart request with 0 mime parts». Давайте разберем, почему она возникает и как правильно организовать создание папки через API.
Ошибка, с которой столкнулся автор, возникает из-за неправильного выбора метода передачи данных. В коде использовался подход для multipart/related. Этот метод предназначен для загрузки файлов, где необходимо передать одновременно и метаданные (в формате JSON), и само содержимое файла (бинарные данные). Сервер Google ожидает, что после блока метаданных обязательно последует вторая часть — тело файла. Если мы отправляем запрос как multipart, но не формируем эту вторую часть, сервер возвращает ошибку, сообщая, что обнаружено ноль MIME-частей.
Важно помнить: создание папки — это не загрузка файла, а создание ресурса в структуре Google Drive. Для папки не требуется передача бинарного содержимого, поэтому сложная структура multipart здесь избыточна и ошибочна.
Для создания папки на Google Drive достаточно выполнить простой POST-запрос, в котором в качестве типа контента (Content-Type) будет указано application/json. В теле запроса нам нужно передать только JSON-объект, содержащий имя папки (name) и её тип (mimeType).
Рассмотрим по шагам, как изменить код для корректного выполнения этой операции:
boundary и сложную логику multipart.Content-Type: application/json.files.create без параметра uploadType=multipart.Ниже представлен вариант реализации на языке 1С. Мы формируем структуру данных, сериализуем ее в JSON и отправляем на сервер Google.
// Формируем структуру метаданных
СтруктураПапки = Новый Структура;
СтруктураПапки.Вставить("name", "ИмяНовойПапки");
СтруктураПапки.Вставить("mimeType", "application/vnd.google-apps.folder");
// Если нужно указать родителя, добавляем его в массив
Если ЗначениеЗаполнено(ИдРодителя) Тогда
СтруктураПапки.Вставить("parents", Новый Массив);
СтруктураПапки.Вставить("parents", ИдРодителя);
КонецЕсли;
// Сериализуем в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураПапки);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Подготавливаем заголовки
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Заголовки.Вставить("Content-Type", "application/json");
// Выполняем запрос
HTTPЗапрос = Новый HTTPЗапрос("/drive/v3/files", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
Соединение = Новый HTTPСоединение("www.googleapis.com", 443, , , Новый ЗащищенноеСоединениеOpenSSL());
Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос, "POST");
Давайте подробнее проанализируем, что мы изменили:
application/json критично. Google Drive API ожидает, что если мы передаем только метаданные, мы явно укажем это в заголовках./drive/v3/files для метода create. Параметр uploadType здесь не нужен, так как мы не выполняем загрузку контента.УстановитьТелоИзСтроки позволяет корректно передать эти данные серверу.Используя этот алгоритм, вы избежите ошибки «0 mime parts» и успешно создадите необходимую структуру каталогов. Если же в дальнейшем вам потребуется загружать файлы внутрь созданных папок, тогда вы сможете вернуться к использованию multipart/related, так как для файлов передача метаданных и бинарного контента в одном запросе является стандартом для API Google Drive.
Надеемся, это решение поможет вам оптимизировать работу с облачным хранилищем из вашей конфигурации 1С!