Файлы

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

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

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

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

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

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

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

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

Тип 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'
                        
                    

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

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

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

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