Как создать папку на Google Drive из 1С без ошибок?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 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).

Рассмотрим по шагам, как изменить код для корректного выполнения этой операции:

  1. Убираем формирование boundary и сложную логику multipart.
  2. Устанавливаем заголовок Content-Type: application/json.
  3. Передаем сериализованный JSON напрямую в тело запроса.
  4. Используем метод 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");

Разбор ключевых моментов

Давайте подробнее проанализируем, что мы изменили:

Используя этот алгоритм, вы избежите ошибки «0 mime parts» и успешно создадите необходимую структуру каталогов. Если же в дальнейшем вам потребуется загружать файлы внутрь созданных папок, тогда вы сможете вернуться к использованию multipart/related, так как для файлов передача метаданных и бинарного контента в одном запросе является стандартом для API Google Drive.

Надеемся, это решение поможет вам оптимизировать работу с облачным хранилищем из вашей конфигурации 1С!

← На главную