api.utils Работа с файлами

Для доступа к операциям используется утилитарный метод api.utils или его короткий псевдоним utils.

Получение списка файлов

  • utils.files(obj)

    Получение списка файлов, прикрепленных к объекту и атрибутам объекта типа "Файл" (кроме файлов, прикрепленных в атрибуте типа "Текст RTF").

    Параметр метода:

    • obj — объект, для которого отображается список файлов.

    Возвращает список файлов, прикрепленных к объекту и атрибутам объекта типа "Файл", упорядоченных в хронологическом порядке (по времени добавления). При обращении к последнему элементу коллекции возвращается последний прикрепленный файл.

    Пример: Получение списка файлов, прикрепленных к самому объекту, а не к его атрибутам типа "Файл" и "Текст в формате RTF":

    def contentFiles = utils.files(obj).findAll{!it.relation};

  • utils.allFiles(obj)

    Получение списка всех файлов, прикрепленных к объекту, атрибутам объекта типа "Файл" и атрибутам объекта типа "Текст в формате RTF".

    Параметр метода:

    • obj — объект или его uuid, для которого отображается список файлов.

    Возвращает список всех файлов, прикрепленных к объекту, атрибутам объекта типа "Файл" и атрибутам объекта типа "Текст в формате RTF", упорядоченных в хронологическом порядке (по времени добавления).

    При обращении к последнему элементу коллекции возвращается последний прикрепленный файл.

  • utils.filesFromRtf(obj)

    utils.filesFromRtf(obj, inPreview)

    Получение списка файлов, связанных с RTF атрибутами объекта.

    Параметры метода:

    • obj — объект или его uuid, для которого отображается список файлов;
    • inPreview:

      • true — возвращает файлы с превью изображений, если они имеются, вместо оригиналов;
      • false или параметр не указан — возвращает только файлы с изображениями в оригинальном размере.

    Возвращает список всех файлов, связанных с RTF атрибутами объекта.

  • utils.filesFromRtf(obj, attrCode)

    utils.filesFromRtf(obj, attrCode, inPreview)

    Получение списка файлов, связанных с определенным RTF атрибутом объекта.

    Параметры метода:

    • obj — объект или его uuid, для которого отображается список файлов;
    • attrCode — код атрибута типа "Текст в формате RTF";
    • inPreview:

      • true — возвращает файлы с превью изображений, если они имеются, вместо оригиналов;
      • false или параметр не указан — возвращает только файлы с изображениями в оригинальном размере.

    Возвращает список всех файлов, связанных с определенным RTF атрибутом объекта.

Преобразования

  • utils.convertFilesToBase64(text, failIfFileNotFound)

    Преобразует текст, содержащий ссылки на файлы в тегах img, в список файлов в формате base64.

    Размер файла ограничивается в конфигурационном файле dbaccess.properties, параметр ru.naumen.file.base64.limit (Файлы).

    Параметры метода:

    • text — текст картинками. String;
    • failIfFileNotFound. Boolean.

      • true — возникает ошибка при отсутствии файла или при отсутствии соединения с файловым хранилищем;
      • false (по умолчанию) — ошибка не возникает. Параметр необязательный.

    Возвращает текст с картинками в виде base64.

    Текст возвращается как html страница (т.е. обернутым в теги <html> <body> ...</body> </html>).

Получение содержимого файла

  • utils.readFileContent(file)

    Получение содержимого файла (содержимое файла считывается как массив байтов).

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

    Особенности:

    • Метод не рекомендуется использовать в одном скрипте вместе с методами api.utils Работа с файлами.
    • В скрипте условии на вход в начальный статус "Зарегистрирован" (registered) содержимое файла получить нельзя, если file — файл принадлежит объекту, который находится в процессе создания.

    Параметр метода:

    • file — файл.

    Пример:

    Copy
    def file = fileList[0] // объект типа "Файл"
    try
      {
      byte[] data = utils.readFileContent(file)
      }
    catch(e)
      {
      logger.error "Ошибка при чтении содержимого файла из файлового хранилища"
      }

Получение источника данных

  • utils.getFileDataSource(file)

    Получение источника данных (DataSource) для указанного файла.

    Параметр метода:

    • file — файл.

Прикрепление файла

  • utils.attachFile(source, fileName, contentType, description, content)

    utils.attachFile(source, relation, fileName, contentType, description, content)

    utils.attachFile(source, relation, fileName, contentType, description, content, isFromRichTextAttr)

    Прикрепление файла к указанному объекту.

    Параметры метода:

    • source — объект, к которому прикрепляется файл;
    • relation — идентификатор связи файла и объекта;
    • fileName — название файла с расширением;
    • contentType — mime-тип файла;
    • description — описание файла;
    • content — содержимое файла;
    • isFromRichTextAttr — признак, является ли файл картинкой из rtf-атрибута.

    Возвращает объект файла.

    Примеры:

    1. Прикрепление файлов к объекту в контент "Список файлов":

    Copy
    /*Параметры*/
    def obj = ...                         //объект, к которому прикрепляется файл
    def fileName = 'file1.txt'            //имя файла (с расширением)
    def contentType = 'text/plain'        //тип содержимого файла (mime-тип)
    def description = 'Описание'          //описание файла
    def data = 'some string'.getBytes()   //содержимое файла в виде массива байт

    /*Прикрепление файла к объекту*/
    def attachedFile = utils.attachFile(obj, fileName, contentType, description, data)

    2. Прикрепление файлов из параметров пользовательских событий к объекту в контент "Список файлов":

    Copy
    /*Параметры*/
    def obj = ...         //объект, к которому прикрепляется файл
    def file = ...        //файл, выбранный как значение параметра типа "Файл" пользовательского события

    /*Прикрепление файла к объекту*/
    def attachedFile = utils.attachFile(obj, file)

    /*Пример*/
    def obj = ...
    params.files?.each { file -> utils.attachFile(obj, file) } // прикрепление к объекту

    3. Прикрепление файлов к атрибуту объекта:

    Copy
    /*Параметры*/
    def obj = ...                         //объект, к которому прикрепляется файл
    def attribute = 'files'               //код атрибута, к которому прикрепляется файл
    def fileName = 'file1.txt'            //имя файла (с расширением)
    def contentType = 'text/plain'        //тип содержимого файла (mime-тип)
    def description = 'Описание'          //описание файла
    def data = 'some string'.getBytes()   //содержимое файла в виде массива байт

    /*Прикрепление файла к объекту*/
    def attachedFile = utils.attachFile(obj, attribute, fileName, contentType, description, data)    

    4. Прикрепление файлов к атрибуту объекта из параметров пользовательских событий:

    Copy
    /*Параметры*/
    def obj = ...                 //объект, к которому прикрепляется файл
    def attribute = 'files'       //код атрибута, к которому прикрепляется файл
    def file = ...                //файл, выбранный как значение параметра типа "Файл" пользовательского события

    /*Прикрепление файла к объекту*/
    def attachedFile = utils.attachFile(obj, attribute, file)

    /*Пример*/
    def obj = ...
    params.files?.each { file ->  utils.attachFile(obj, 'files', file) }