Из 1С в S3 и обратно. Работа с объектным хранилищем

06.02.24

Интеграция - Облачные сервисы, хостинг

В данной статье демонстрируется работа с объектным хранилищем 1С с использованием подписанных (pre-signed) ссылок. Загрузка, скачивание и удаление реализованы на "чистом" языке 1С без внешних компонент и сервисов. В качестве провайдера хранилища S3 будем использовать Яндекс.Облако

Об S3 (Simple Storage Service)

S3 (Simple Storage Service) — это сервис облачного хранения данных от компании Amazon. Он позволяет хранить и получать данные в любом объеме и в любое время.

Принцип работы S3 заключается в том, что данные хранятся на распределенной сети серверов, расположенных в разных дата-центрах. Это обеспечивает высокую надежность и доступность данных. Кроме того, S3 поддерживает георепликацию данных, то есть автоматическое копирование данных в несколько регионов для обеспечения их доступности в случае аварий или сбоев.

Для работы с S3 используются специальные API, которые позволяют загружать, скачивать и удалять файлы, а также управлять доступом к ним. Также S3 интегрирован с многими другими сервисами Amazon, что позволяет использовать его в комплексе с другими облачными сервисами.

 

Как работает S3

Сервис включает доступ к защищенному облачному хранилищу, API-интерфейс с прямым доступом к хранимым объектам через интернет и дополнительные опции, зависящие от поставщика сервиса.

Объект в S3 — это двоичные данные, которые хранятся в бакете (backet). Каждый объект имеет свой уникальный ключ, который используется для доступа к нему. Ключи объектов могут быть любой длины и содержать любые символы, кроме ‘/’, '' и ‘+’.
Кроме того объект содержит метаданные - прочие значимые атрибуты объекта (размер, тип и другие пользовательские данные для отбора и сортировки). Они нужны, чтобы находить однотипные объекты и работать с ними.

 

Инструменты для работы

Для работы с хранилищем S3 существует несколько инструментов: консольные клиенты (AWS CLIS3cmd), файловые браузеры (CyberduckWinSCP), а так же SDK для популярных языков программирования - JavaJavaScriptPython.NETC++PHPGo.
Для 1С готовых решений нет. Однако, поскольку 1С:Предприятие 8.3 поддерживает выполнение HTTP запросов из коробки, можно реализовать основные функции с использованием механизма подписанных (pre-signed) ссылок.

С помощью подписанных ссылок произвольный пользователь Сети может выполнять с хранилищем S3 различные операции, например, скачать, загрузить или удалить объект.

Подписанная ссылка — это URL, содержащий данные для авторизации запроса в своих параметрах. Составить подписанный URL может пользователь, владеющий статическими ключами доступа.  Описание создание подписанной ссылки для Amazon Simple Storage Service можно изучить по ссылке.

В качестве примера для практической реализации механизма мы будем использовать ресурсы Object Storage Яндекс.Облако.

 
 Общий вид подписанной ссылки в Яндекс.Облако

 

 

Создание бакета и получение ключей доступа.

Для работы вы должны предварительно авторизоваться в консоли управления и создать платежный аккаунт. При первой регистрации выдается стартовый грант, который действует в течении 60 дней и позволит использовать ресурсы без оплаты. Подробнее о начале работы в облаке можно прочитать по ссылке.

Далее выберите каталог, в котором хотите создать бакет и нажмите кнопку Создать ресурс и выберите Бакет. Укажите имя бакета, которое должно быть уникальным для всего Object Storage. Это имя используется как часть URL для доступа к данным и его будут видеть пользователи. При необходимости можно ограничить размер. Обратите внимание, что на данный момент первый гигабайт хранения не тарифицируется. В качестве класса хранилище укажите Стандартное. Подробнее о классах хранилищ можно прочитать тут.

Для для доступа к бакету и формирования подписанных ссылок следует получить статические ключи доступа. Для этого в консоли управления в верхней части экрана перейдите на вкладку Сервисные аккаунты. Выбираем аккаунт с нужными правами и жмем кнопку Создать новый ключ на верхней панели и выбираем Создать статический ключ доступа. Копируем ключи из диалогового окна в надежное место, так как после закрытия диалога значение ключей уже будет недоступно. С помощью них мы будем подписывать ссылки для доступа к хранилищу.

 

Реализация.

Подписанная ссылка для работы с Object Storage Яндекса должна иметь следующие параметры:

  • X-Amz-Algorithm - идентифицирует версию подписи и алгоритм ее вычисления. Это константа, значение AWS4-HMAC-SHA256.
  • X-Amz-Date - время в формате ISO8601, например, 20180719T094539Z. Указанная дата должна по значению (не по формату) совпадать с датой в параметре X-Amz-Credential.
  • X-Amz-Expires - время в секундах, в течение которого ссылка действительна. Начало отсчета — момент, указанный в параметре X-Amz-Date. Максимальное значение — 2592000 секунд (30 дней).
  • X-Amz-SignedHeaders  - заголовки запроса, которые вы хотите подписать. Обязательно следует подписать заголовок Host и все заголовки X-Amz-*, которые используются в запросе, в том числе заголовки метаданных X-Amz-Meta-*.  Другие заголовки подписывать не обязательно, однако чем больше вы подпишете заголовков, тем безопаснее будет запрос. Заголовки запроса отделяются символами ;.
  • X-Amz-Credential - идентификатор для подписи. Строка формата <идентификатор_ключа_доступа>/<дата>/ru-central1/s3/aws4_request, где <дата> (в формате YYYYMMDD — год, месяц, день) должна совпадать с датой, установленной в заголовке X-Amz-Date.
  • X-Amz-Signature - подпись запроса, формирование которой будет описано далее.

В первую очередь следует отметить то, что механизм подписания ссылок использует HMAC с хэширующей функцией SHA256. Данный механизм был реализован средствами 1С:Предприятие 8.3.

 
 Реализация HMAC с SHA256

Опишем вспомогательные функции для формирования подписанной ссылки:

 
 Служебные функции

И собственно сама функция.

 
СоздатьСсылку(КлючДоступа, СекретныйКлюч, Бакет, Путь, Метод="GET", ВремяЖизни=300, Заголовки=Неопределено)

В качестве параметров принимает следующие аргументы:

  • КлючДоступа, СекретныйКлюч - ключи, полученные в консоли управления Яндекс.Облако
  • Бакет - имя бакета, который Вы создали в консоли.
  • Метод:
    • GET - получение данных из хранилища
    • PUT - отправка данных в хранилище
  • ВремяЖизни - время жизни ссылки, максимальное значение — 2592000 секунд (30 дней).
  • Заголовки - заголовки метаданных. Ключи всегда должны начинаться на X-Amz-Meta-. Например X-Amz-Meta-Author, X-Amz-Meta-KratkoeOpisanie.

По описанию на Amazon, стандарт позволяет производить загрузку данных частями. Т.е. можно обрабатывать большие файлы частями - последовательно или параллельно. Однако у Яндекса я не нашел описания в документации, поэтому не пробовал это реализовать. А с иностранными облаками сейчас проблемы.

 

Примеры использования

 
 Отправка данных
 
 Получение данных

 

Выводы

Объектное хранилище S3 отличный инструмент для надежного хранения данных. Сферы его использования варьируются от озер данных до структурированных файловых хранилищ. 

Описанный вариант интеграции с 1С можно использовать, например, для отправки данных в облачные СУБД (YDB, ClickHouse) для последующего доступа к ним из BI-систем (Datalens).

Или просто для хранения резервных копий информационных баз.

Вступайте в нашу телеграмм-группу Инфостарт

S3 Яндекс.Облако AWS-S3 Хранилище Интеграция

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Управление взаимоотношениями с клиентами (CRM) Телефония, SIP Облачные сервисы, хостинг 1С:Предприятие 8 1C:Бухгалтерия Управленческий учет Платные (руб)

Продукт интеграции возможностей Облачной АТС Билайн в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, ведение журнала, анализ данных об использовании мобильной связи.

12000 руб.

20.03.2019    24952    57    0    

40

Облачные сервисы, хостинг Системный администратор Бесплатно (free)

Рассматриваем переход от классической инфраструктуры к облачным моделям и причины, по которым бизнес все чаще выбирает PaaS: скорость внедрения, снижение затрат и отказоустойчивость. Разбираем, какую роль Kubernetes играет в автоматизации, масштабировании и управлении контейнеризированными приложениями, а также можно ли считать 1С Cloud Native-приложением. На примере архитектуры кластера 1С показываем, как компоненты сервера упаковываются в контейнеры, какие ограничения возникают из-за монолитной природы 1С и как их можно обходить. В финальной части объясняем, как Prometheus, Grafana, Loki/ELK и другие инструменты мониторинга помогают контролировать состояние сервиса и делать облачную платформу удобнее для бизнеса.

02.06.2026    337    militarymax    0    

0

Перенос данных 1C Облачные сервисы, хостинг Программист 1С 8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Бесплатно (free)

Если нужно выгрузить данные базы 1С: БП в формате data_dump, без конфигурации, можно воспользоваться типовым функционалом "Переход в облачный сервис". Но вы можете столкнуться с тем, что в начале выгрузки типовая обработка пишет ошибку. Ошибка связана с тем, что в справочнике "Предопределенные варианты отчетов" могут быть дубли. Это служебный справочник, и его данные можно редактировать или удалять только программно. Типовая обработка удаления помеченных объектов не поможет в этом случае. Там просто нет объектов из этого справочника, даже если они помечены на удаление. Написанная мной обработка поможет удалить некорректные элементы справочника буквально в пару кликов.

29.05.2026    209    17    Kilgure    2    

2

WEB-интеграция Облачные сервисы, хостинг 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Абонемент ($m)

Внешняя обработка предназначена для автоматической выгрузки файлов из локального или серверного каталога на Яндекс.Диск через официальный REST API Яндекса. Решение удобно использовать для регулярной передачи отчетов, обменных файлов, архивов, выгрузок из 1С и других документов в облачное хранилище без ручного копирования через браузер или клиент Яндекс.Диска.

3 стартмани

18.05.2026    612    8    Rom_Kat    0    

4

Облачные сервисы, хостинг Системный администратор Программист Бесплатно (free)

Рассказываем, как родилась идея готового облака 1С и какие инновации сделали его полноценной PaaS-платформой. Материал будет полезен тем, кто ищет способ упростить взаимодействие с 1С, сохранив масштабируемость и надежность корпоративных систем.

14.04.2026    733    militarymax    0    

2

Облачные сервисы, хостинг WEB-интеграция Программист Бесплатно (free)

Очереди сообщений – это инструмент обмена данными между системами. На примере Yandex Message Queue разбираем, как брокер от Яндекс.Облака помогает решать практические задачи. Даем бесплатную библиотеку для 1С, которая упрощает работу с YandexMQ и другими SQS-сервисами.

17.11.2025    3976    leemuar    37    

28

Облачные сервисы, хостинг Программист 1С:Предприятие 8 Абонемент ($m)

Универсальная выгрузка отчетов 1С в облако (Яндекс.Диск, Mail.ru) по расписанию. Любые отчеты на СКД и обычные. Вычисляемые параметры, макросы имен, 5 форматов, полная история. Обычные формы 8.2+. Тестировалась на платформе 8.3.25.1394 в режиме совместимости 8.3.12.

2 стартмани

20.10.2025    1402    4    daka    4    

5

Облачные сервисы, хостинг Бесплатно (free)

Работа с системами 1С в облаке открывает новые горизонты для эффективного управления компанией. Цель данного обзора — проанализировать доступные на рынке облачные сервисы и помочь выбрать решение, которое наилучшим образом соответствует задачам и потребностям вашего бизнеса.

16.10.2025    2060    osa1C    1    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Viktor_Ermakov 402 07.02.24 13:17 Сейчас в теме
спасибо за труд, хорошая статья
artbear; Sedaiko; +2 Ответить
2. laperuz 47 07.02.24 17:54 Сейчас в теме
Для полноты статьи стоит упомянуть, что начиная с 8.3.24 в платформе реализована нативная поддержка S3, правда только с КОРП лицензией
https://its.1c.ru/db/v8324doc/bookmark/cs/TI000000349
METAL; Sedaiko; o.nikolaev; +3 Ответить
4. Sedaiko 602 08.02.24 01:04 Сейчас в теме
(2) Спасибо, прозевал инфу. Давно делал реализацию.
Маловероятно, что в ПРОФ появится. Тем более что это фишка клиент-серверного инстанса
11. JohnyDeath 302 11.02.24 19:35 Сейчас в теме
(2) там немного про другое: дали возможность автоматом сохранять двоичные данные в S3, но кодом свой любой файл в нужное тебе хранилище ты никак не отправишь.
Я отправлял запрос в бота 1С, чтобы они дали возможность простым разработчикам удобно работать с S3 хранилищами, ведь внутри платформы всё уже есть, осталось пробросить это для нас наверх и описать в документации.
3. o.nikolaev 217 08.02.24 00:37 Сейчас в теме
5. baracuda 2 08.02.24 09:11 Сейчас в теме
А есть ли бесплатные варианты что у себя на сервере можно было поднять S3 подобное хранилище?
6. S_Vidyaev 08.02.24 11:46 Сейчас в теме
Тоже приходилось реализовывать когда-то. Хочу добавить, что AWS4 аутентификация очень удобно сделана в Коннекторе

(5) Есть, много. например, ceph
kasper076; baracuda; Sedaiko; +3 Ответить
7. Sedaiko 602 08.02.24 13:54 Сейчас в теме
(5) MinIO
Но смысл все на одном сервере? сама фишка объектного хранилища - горизонтальное масштабирование и резервирование данных на разных узлах.
S_Vidyaev; +1 Ответить
8. baracuda 2 08.02.24 14:21 Сейчас в теме
(7) политиками безопасности например может быть запрещено размещение данных на внешних ресурсах.
9. BlizD 1120 08.02.24 20:07 Сейчас в теме
Спасибо. За статью.

Несколько лет назад делал расширение для хранение файлов на s3 вместо томов на диске.

Возможно будет кому полезно.


https://github.com/BlizD/S3_SSL

Расширение для БСП для хранения файлов на s3 (minio, Amazon S3, Mail.Ru Cloud и т.п.)

Разработано совместно с @zotov-vs

Версия БСП: 3.1.2.343

Версия платформы: 8.3.17.1851

При обращении к API используется Connector @vbondarevsky

Спасибо malikov-pro за публикации external-storage-1c-ssl Хранение файлов томов БСП в хранилище с OpenStack API @malikov-pro
Nuuq; clic007; Sedaiko; +3 Ответить
10. Sedaiko 602 09.02.24 03:42 Сейчас в теме
(9) Я, кстати, думал об этом. Но больше склоняюсь к монтированию через s3fs-fuse. Хотя в проде не запускал
12. LjeDmitrii 14.02.24 11:12 Сейчас в теме
Спасибо за статью! Очень помогло в построении обмена с Yandex Object Storage
13. magv 6 09.04.24 10:57 Сейчас в теме
Для Yandex Object Storage - заработало сразу
При проверке для провайдера Selectel - сразу не заработало.
Требуется в функции СоздатьСсылку() поменять строку:
Поля.Добавить("X-Amz-Signature=" + ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));

на строку:
Поля.Добавить("X-Amz-Signature=" + НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура)));

В описании на сайте Amazon для поля Signature было указано:
The 256-bit signature expressed as 64 lowercase hexadecimal characters.
user1490444; kholkin; Nuuq; pavlo; user1951539; L0z4; +6 Ответить
14. magv 6 05.09.24 15:12 Сейчас в теме
На днях возникла проблема при загрузке файлов, в имени которых есть пробелы и/или русские буквы.

Ошибка такого рода:
Code: SignatureDoesNotMatch
Message: The request signature we calculated does not match the signature you provided. Check your AWS secret access key and signing method. For more information, see REST Authentication and SOAP Authentication for details.;

Вылечилось (после долгих мучений) передачей параметра "Путь" в функцию СоздатьСсылку():

Путь = СтрЗаменить(КодироватьСтроку(Путь, СпособКодированияСтроки.КодировкаURL, "UTF-8"), "%2F", "/")
15. pavlo 03.07.25 14:53 Сейчас в теме
Странно, но у меня возвращает
The request signature we calculated does not match the signature you provided. Check your key and signing method.
Ключи верные 100%
16. pavlo 07.07.25 08:37 Сейчас в теме
(15) c VK походу это не работает :(
17. pavlo 07.07.25 09:14 Сейчас в теме
(16) c VK только как выше в комментах писали вылечилось
Поля.Добавить("X-Amz-Signature=" + НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура)));
23. Maden 17.12.25 08:13 Сейчас в теме
(15) Такая ошибка может быть если ты пытаешься скачать по ссылке для загрузки и наоборот, подозреваю.
18. RomanIT 24 17.07.25 17:29 Сейчас в теме
А как отправить файл?
19. Lupeykin 5 17.09.25 09:25 Сейчас в теме
(18) &НаСервере
Процедура ЗагрузитьФайлыВХранилище() Экспорт

ПараметрыЗапроса = ВернутьПараметрыЗапроса();
КаталогТемп = КаталогВременныхФайлов();
ИмяФайла = "C:\s3\Img.jpg";
ЗаполнитьТипФайла(ПараметрыЗапроса, "jpg");
ЗаполнитьПрефиксИИмяВПараметрах(ПараметрыЗапроса, ИмяФайла, "");
ПараметрыЗапроса.Метод = "PUT";
КомандаВыполненаУспешно = ВыполнитьКоманду(ПараметрыЗапроса);

КонецПроцедуры

&НаСервере
Функция ВыполнитьКоманду(Знач Параметры, ВозвращатьОтвет = Ложь, ПолучитьВсеФайлыВКорзине = Ложь) Экспорт
ХостS3 = Параметры.ТочкаДоступа;
Порт = Параметры.Порт;
SSL = Параметры.OpenSSL;

АбсолютныйПуть = "/" + Параметры.ИмяКорзины + "/";
contentHash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b785­2b855"; //empty string
ТипФайла = Параметры.ТипФайла;
Если ТипФайла = "" Тогда
ТипФайла = "image/jpeg";
КонецЕсли;

Префикс = СтрЗаменить(КодироватьСтроку(Параметры.ТекущийПрефикс, СпособКодированияСтроки.КодировкаURL), "%2F", "/");
ПрефиксКодированный = КодироватьСтроку(Параметры.ТекущийПрефикс, СпособКодированияСтроки.КодировкаURL);

Если Параметры.Метод = "PUT" Тогда

Метод = "PUT";
ПараметрыЗапроса = "";
ИдентификаторРесурса = АбсолютныйПуть + Параметры.ТекущийПрефикс;
АбсолютныйПуть = ИдентификаторРесурса;

Если НЕ Параметры.ТипФайла = Неопределено Тогда
ТипФайла = Параметры.ТипФайла;
КонецЕсли;

Если НЕ Параметры.ПутьКФайлу = "" Тогда
contentHash = НРег(ПолучитьHexСтрокуИзДвоичныхДанных(РассчитатьХешСуммуФайла(Параметры.ПутьКФайлу, ХешФункция.SHA256)));
КонецЕсли;

ИначеЕсли Параметры.Метод = "DELETE" Тогда

Метод = "DELETE";
ПараметрыЗапроса = "";
ИдентификаторРесурса = АбсолютныйПуть + Параметры.ТекущийПрефикс;
АбсолютныйПуть = ИдентификаторРесурса;

ИначеЕсли Параметры.Метод = "GETFILE" Тогда

Заголовки = Новый Соответствие();

Метод = "GET";

ЗапроснаПолучениеФайла = Параметры.СсылкаНаФайл;
HTTPЗапрос = Новый HTTPЗапрос(ЗапроснаПолучениеФайла, Заголовки);

СоединениеHTTP = Новый HTTPСоединение(ХостS3, Порт,,,,30,?(SSL = Истина, Новый ЗащищенноеСоединениеOpenSSL, Неопределено));

HTTPОтвет = СоединениеHTTP.ВызватьHTTPМетод(Метод, HTTPЗапрос);

Если HTTPОтвет.КодСостояния = 200 Тогда

ДвоичныеДанные = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();

ДвоичныеДанные.Записать(Параметры.ПутьКФайлу);

Возврат ДвоичныеДанные;
Иначе
Возврат Ложь;
КонецЕсли;

КонецЕсли;

ТекущаяДатаВремя = Формат(ТекущаяУниверсальнаяДата(), "ДФ=yyyyMMddTHHmmssZ");
ТекущаяДата = Формат(ТекущаяУниверсальнаяДата(), "ДФ=yyyyMMdd");

ОбластьВидимости = ТекущаяДата + "/" + Параметры.Регион + "/" + Параметры.Сервис + "/aws4_request";

НоваяСтрока = Символы.ПС;

КаноническийЗапрос = Метод + НоваяСтрока +
АбсолютныйПуть + НоваяСтрока +
ПараметрыЗапроса + НоваяСтрока +
"content-type:" + ТипФайла + НоваяСтрока +
"host:" + ХостS3 + НоваяСтрока +
"x-amz-content-sha256:" + contentHash + НоваяСтрока +
"x-amz-date:" + ТекущаяДатаВремя + НоваяСтрока +
НоваяСтрока +
"content-type;host;x-amz-content-sha256;x-amz-date" + НоваяСтрока +
"" + contentHash;

КаноническийЗапросДвоичныеДанные = РассчитатьХешСумму(КаноническийЗапрос, ХешФункция.SHA256);

КаноническийЗапросХеш = Нрег(ПолучитьHexСтрокуИзДвоичныхДанных(КаноническийЗапросДвоичныеДанные));

СтрокаДляПодписи = "AWS4-HMAC-SHA256" + НоваяСтрока + ТекущаяДатаВремя + НоваяСтрока + ОбластьВидимости + НоваяСтрока + КаноническийЗапросХеш;

Подпись = ПолучитьКлючДляПодписи(Параметры.СекретныйКлюч, ТекущаяДата, Параметры.Регион, Параметры.Сервис);

ПодписьДвоичныеДанные = HMACSHA256(Подпись, ПолучитьДвоичныеДанныеИзСтроки(СтрокаДляПодписи));

ПодписьХеш = Нрег(ПолучитьHexСтрокуИзДвоичныхДанных(ПодписьДвоичныеДанные));

Авторизация = "AWS4-HMAC-SHA256 Credential=" + Параметры.КлючДоступа + "/" + ОбластьВидимости
+ ",SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=" + ПодписьХеш;

Заголовки = Новый Соответствие();
Заголовки.Вставить("Host", ХостS3);
Заголовки.Вставить("Content-Type", ТипФайла);
Заголовки.Вставить("x-amz-content-sha256", contentHash);
Заголовки.Вставить("x-amz-date", ТекущаяДатаВремя);
Заголовки.Вставить("Authorization", Авторизация);

HTTPЗапрос = Новый HTTPЗапрос(ИдентификаторРесурса, Заголовки);
Если НЕ Параметры.ПутьКФайлу = "" Тогда
HTTPЗапрос.УстановитьИмяФайлаТела(Параметры.ПутьКФайлу);
КонецЕсли;

СоединениеHTTP = Новый HTTPСоединение(ХостS3, Порт,,,,30,?(SSL = Истина, Новый ЗащищенноеСоединениеOpenSSL, Неопределено));

HTTPОтвет = СоединениеHTTP.ВызватьHTTPМетод(Метод, HTTPЗапрос);

Если HTTPОтвет.КодСостояния = 200
Тогда
ДвоичныеДанные = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();

Если ВозвращатьОтвет Тогда
Возврат HTTPОтвет;
Иначе
Возврат Истина;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;

КонецФункции

&НаСервере
Функция ВернутьПараметрыЗапроса()

ПараметрыЗапроса = Новый Структура();
ПараметрыЗапроса.Вставить("ИмяКорзины", "picture");
ПараметрыЗапроса.Вставить("Регион", "us-east-1");
ПараметрыЗапроса.Вставить("Префикс", "/");
ПараметрыЗапроса.Вставить("ТочкаДоступа", "localhost");
ПараметрыЗапроса.Вставить("Порт", 9000);
ПараметрыЗапроса.Вставить("МаксимальноеКоличествоКлючейДляЗапроса", 1000);
ПараметрыЗапроса.Вставить("КлючДоступа", "admin");
ПараметрыЗапроса.Вставить("СекретныйКлюч", "jxxkkkxkdkfhde");
ПараметрыЗапроса.Вставить("Сервис", "s3");
ПараметрыЗапроса.Вставить("Метод", "");
ПараметрыЗапроса.Вставить("ТипФайла", "");
ПараметрыЗапроса.Вставить("ПутьКФайлу", "");
ПараметрыЗапроса.Вставить("СсылкаНаФайл", ""); // пример picture/Img.jpg ,бакет/файл
ПараметрыЗапроса.Вставить("ТекущийПрефикс", "");
ПараметрыЗапроса.Вставить("OpenSSL",Ложь);

Возврат ПараметрыЗапроса;

КонецФункции
20. Lupeykin 5 17.09.25 09:26 Сейчас в теме
(19)
#Область HMAC_SHA256

Функция РассчитатьХешСумму(ДвоичныеДанные, ТипХешФункции)

ОбъектХеш = Новый ХешированиеДанных(ТипХешФункции);
ОбъектХеш.Добавить(ДвоичныеДанные);

Return ОбъектХеш.ХешСумма;

КонецФункции

Функция РассчитатьХешСуммуФайла(ИмяФайла, ТипХешФункции)

ОбъектХеш = Новый ХешированиеДанных(ТипХешФункции);
ОбъектХеш.ДобавитьФайл(ИмяФайла);

Return ОбъектХеш.ХешСумма;

КонецФункции

Функция РассчитатьHMAC(Знач Ключ, Знач ДвоичныеДанные, ТипХешФункции, РазмерБлока)

Если Ключ.Размер() > РазмерБлока Тогда
Ключ = РассчитатьХешСумму(Ключ, ТипХешФункции);
КонецЕсли;

Если Ключ.Размер() < РазмерБлока Тогда
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
Ключ = Лев(Ключ + СоединитьСтроки("00", РазмерБлока), РазмерБлока * 2);
КонецЕсли;

Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));

ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(СоединитьСтроки("36", РазмерБлока));
opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(СоединитьСтроки("5c", РазмерБлока));

ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);

opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);

Возврат РассчитатьХешСумму(ОбъединитьДвоичныеДанные(okeypad, РассчитатьХешСумму(ОбъединитьДвоичныеДанные(ikeypad, ДвоичныеДанные), ТипХешФункции)), ТипХешФункции);

КонецФункции

Функция ОбъединитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2)

МассивДанных = Новый Массив;
МассивДанных.Добавить(ДвоичныеДанные1);
МассивДанных.Добавить(ДвоичныеДанные2);

Возврат СоединитьДвоичныеДанные(МассивДанных);

КонецФункции

Функция СоединитьСтроки(Строка, Количество)

Части = Новый Массив(Количество);
Для Счт = 1 To Количество Цикл
Части.Добавить(Строка);
КонецЦикла;

Возврат СтрСоединить(Части, "");

КонецФункции

Функция HMACSHA256(Знач Ключ, Знач ДвоичныеДанные)

Return РассчитатьHMAC(Ключ, ДвоичныеДанные, ХешФункция.SHA256, 64);

КонецФункции

Функция ПолучитьКлючДляПодписи(Ключ, Дата, НазваниеРегиона, ИмяСервиса)

КлючСекрет = ПолучитьДвоичныеДанныеИзСтроки ("AWS4" + Ключ);

КлючДата = HMACSHA256(КлючСекрет, ПолучитьДвоичныеДанныеИзСтроки(Дата));
КлючРегион = HMACSHA256(КлючДата, ПолучитьДвоичныеДанныеИзСтроки(НазваниеРегиона));
КлючСервис = HMACSHA256(КлючРегион, ПолучитьДвоичныеДанныеИзСтроки(ИмяСервиса));
КлючПодпись = HMACSHA256(КлючСервис, ПолучитьДвоичныеДанныеИзСтроки("aws4_request"));

Return КлючПодпись;

КонецФункции




#КонецОбласти
21. Sergo1C 29.09.25 11:37 Сейчас в теме
Есть ли возможность получить список файлов который лежит в определенном бакете?
22. leemuar 57 23.10.25 10:10 Сейчас в теме
(21) конечно, ListObjects метод называется в API
24. Mopo3 336 19.12.25 19:17 Сейчас в теме
а нет ли готовой обработки для Яндекс S3?

что-то не получается пока "завестись"..( мозгов не хватает у меня где-то..))
25. alf2006x 25 30.01.26 14:45 Сейчас в теме
Чё-т ничего не пойму ...
Всё вроде делаю как надо, файл уходит, ответ 200, в бакете появляется файл с моим названием, но ... размер в хранилище 15 Кб и внутри него "Hello World!"
)))
Что за премудрость такая?!
Откуда эти письмена загадочные берутся?!...
Никак не догоню.
26. alf2006x 25 30.01.26 14:48 Сейчас в теме
Вру, не килобайт, а просто - байт.
13 байт.

Если есть мысли куда покопать - скиньте, пожалуйста.
27. alf2006x 25 30.01.26 14:56 Сейчас в теме
Ага,.. "Хэллоу, Мир" - я нашёл )
А вот как мне мой файл с локального диска пробросить - пока не допетрил )
28. alf2006x 25 30.01.26 15:16 Сейчас в теме
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеФайла);

Вопрос снят.
29. alf2006x 25 04.02.26 14:43 Сейчас в теме
Еще одна проблема всё же осталась.
Теперь - ошибка 413
Файл ту лардж.
И это выдаёт всего на 8Гб.
Как быть?
Для отправки сообщения требуется регистрация/авторизация