Файлы

Переход в файловый контекст

Иногда возникает необходимость скачать бинарный файл (например, архив с документами) с сайта донора и сохранить результат в хранилище или на локальный диск. Для этого нам нужно перейти в файловый контекст, используя команду file. Эта команда работает только в блоковом контексте и требует наличия в регистре закодированного в base64 содержимого бинарного файла.

Давайте попробуем это на примере. Мы должны загрузить файл, перейти в блок с закодированным содержимым, отпарсить содержимое блока в регистр и перейти в file контекст:

                        # ЗАГРУЖАЕМ ФАЙЛ
- walk:
    to: http://www.td-systems.com/download/pw.zip
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 СОДЕРЖИМЫМ
    - find:
        path: file
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В ФАЙЛОВЫЙ КОНТЕКСТ
        - file:
            do:
            # СОХРАНЯЕМ ИЛИ ТРАНСФЕРИМ ФАЙЛ
                        
                    

Сохраняем файл

Итак, нам нужно сохранить файл. Можно сохранить его в локальный файл на компьютере (доступно только в скомпилированном диггере) или в облачное хранилище (на данный момент поддерживается: S3). Для сохранения файла используется команда save.

Команда поддерживает следующие параметры:

Параметр Описание
ext Расширение, определяющее тип сохраняемого файла. Если опущено, используется значение по умалчанию "ext".
to Тип хранилища. В данный момент поддерживаются следующие типы: file и s3.

Тип file сохраняет файл на локальный диск. Этот тип будет работать только в скомпилированных парсерах. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить файл. Если не задано, файл будет сохранен в текущую директорию.
                        # ЗАГРУЖАЕМ ФАЙЛ
- walk:
    to: http://www.td-systems.com/download/pw.zip
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 СОДЕРЖИМЫМ
    - find:
        path: file
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В ФАЙЛОВЫЙ КОНТЕКСТ
        - file:
            do:
            # СОХРАНЯЕМ ФАЙЛ (e://myfiles/somescript.zip)
            - save:
                to: file
                ext: zip
                name: somescript
                path: 'e://myfiles'
                        
                    

Тип s3 сохраняет файл в облачное хранилище Amazon S3. При использовании хранилища подобного типа, требуются следующие параметры:

Параметр Описание
key Ключ доступа к AWS S3. Обязательный параметр.
secret Секрет для доступа к AWS S3. Обязательный параметр.
region Регион в AWS S3. Обязательный параметр.
bucket Имя бакета в AWS S3. Обязательный параметр.
token Токен для доступа в AWS S3. Необязательный параметр.
name Имя файла без расширения. Если не задано, будет сгенерировано уникальное имя.
path Путь до директории, куда нужно сохранить файл. Если не задано, файл будет сохранен в рутовую директорию бакета.
                        # ЗАГРУЖАЕМ ФАЙЛ
- walk:
    to: http://www.td-systems.com/download/pw.zip
    do:
    # ПЕРЕХОДИМ В БЛОК С ЗАКОДИРОВАННЫМ В BASE64 СОДЕРЖИМЫМ
    - find:
        path: file
        do:
        # ПАРСИМ СОДЕРЖИМОЕ
        - parse
        # ПЕРЕХОДИМ В ФАЙЛОВЫЙ КОНТЕКСТ
        - file:
            do:
            # СОХРАНЯЕМ ФАЙЛ В ХРАНИЛИЩЕ S3 (/scripts/myscript.zip)
            - save:
                to: s3
                key: AWSAJJDJJSJDJDJFK
                secret: AWSSERETTDHFJJJDJSKFJFJSJJFJJGKRI
                region: us-east-1
                bucket: mybucket
                name: myscript
                ext: zip
                path: '/scripts'
                        
                    

Примите во внимание, что при трасфере файлов в облачные хранилища используется квота на трафик, соответствующая вашему тарифному плану. К примеру, на бесплатном плане квота составляет 10 мегабайт в месяц. При достижении лимита, файлы перестанут сохраняться в облачном хранилище. Также файлы не будут сохраняться в облачные хранилища, если ваш диггер находится в режиме отладки.

Далее мы рассмотрим функции, предназначенные для работы с географическими данными.