Перейти к основному содержимому
Версия: 1.36.0

Рекомендации по вложениям

Копирование вложений​


Для копирования вложений используйте серверные скрипты. Это можно сделать одним из двух способов:

  • Используйте объект base64 исходного вложения. В силу специфики работы метода readBase64, размер копируемого файла ограничен 10 Мб.

    Пример
    const attachmentRec = new SimpleRecord('sys_attachment');
    attachmentRec.get('167654133500015741');
    ss.info(`Original size bytes: ${attachmentRec.size_bytes}`);
    // Info: Original size bytes: 92414492

    const attach = new SimpleAttachment();
    const base64Value = attach.readBase64(attachmentRec.sys_id);

    const attachCopyId = attach.writeBase64(
    attachmentRec.record_document_id,
    'copy_of_' + attachmentRec.file_name,
    base64Value,
    attachmentRec.mime_content_type
    );
    if (attachCopyId) {
    attachmentRec.get(attachCopyId);
    ss.info(`/record/sys_attachment/${attachCopyId}`);
    // Info: /record/sys_attachment/167654428100399185
    ss.info(`Copy size bytes: ${attachmentRec.size_bytes}`);
    // Info: Copy size bytes: 0
    }
  • Используйте класс SimpleAttachmentService. Максимальный размер копируемого файла определяется ограничением экземпляра на размер загружаемого вложения, которое задается системным свойством max_file_size_upload.

    Пример
    const attachmentRec = new SimpleRecord('sys_attachment');
    attachmentRec.get('167654133500015741');
    ss.info(`Original size bytes: ${attachmentRec.size_bytes}`);
    // Info: Original size bytes: 92414492

    const importSource = new SimpleRecord('sys_import_source');
    importSource.get('167647710807446665'); // From Incident Import Source
    const docId = ss.getDocIdByIds(importSource.sys_db_table_id, importSource.sys_id);

    const attach = new SimpleAttachment();
    const attachUrl = attach.getAttachmentUrlById(attachmentRec.sys_id);
    const simpleAttach = new SimpleAttachmentService();
    const docID = ss.getDocIdByIds(importSource.sys_db_table_id, importSource.sys_id);
    const attachCopyId = simpleAttach.createAttachmentByUrl(attachUrl, docId, `Copy_of_the_${attachmentRec.file_name}`);

    if (attachCopyId) {
    attachmentRec.get(attachCopyId);
    ss.info(`/record/sys_attachment/${attachCopyId}`);
    // Info: /record/sys_attachment/167654472004676912
    ss.info(`Copy size bytes: ${attachmentRec.size_bytes}`);
    // Info: Copy size bytes: 92414492
    }

Ссылка скачивания вложения​


Ссылки на вложения могут использоваться для различных целей:

  • скачивание одного файла из вложений
  • скачивание всех файлов из вложений в виде архива
  • формирование ссылки на файл вложения для передачи в атрибут HTML-тега src
  • формирование ссылки на файл вложения для вставки в содержимое HTML-поля

Для формирования ссылки на скачивание одного файла из вложений используйте ссылку вида {your-instance-url}/v1/attachments/download/{sys_attachment.sys_id}?access-token={user_token}, где:

  • your-instance-url – адрес экземпляра, на котором располагается вложение. Если вложение расположено на том же экземпляре, на котором запускается скрипт, используйте относительную ссылку вида /v1/attachments/download/${sys_attachment.sys_id}?access-token=${s_user.accessToken}.

  • sys_attachment.sys_id – ID записи вложения.

  • user_token – токен пользователя.

    примечание

    Начиная с версии платформы 1.29.0, токен пользователя хранится в cookie с параметрами HttpOnly и Secure, и передавать токен в запрос на скачивание вложений не нужно. Для получения токена текущего пользователя в клиентском скрипте на версиях платформы до 1.29, используйте свойство s_user.accessToken.

Чтобы сформировать ссылку на скачивание нескольких файлов вложений в виде архива, используйте формат {your-instance-url}/v1/attachments/download-all/?access-token={user_token}&attachment_ids={sys_attachment.sys_id,sys_attachment.sys_id}.

Формат ссылки для HTML-контента зависит от параметров записи вложения. Записи вложений могут быть публичными или непубличными. Публичность вложений влияет на то, будет ли ссылка на вложение иметь срок действия.

  • Ссылки на публичные вложения не имеют срока действия.
  • Ссылки на непубличные вложения по умолчанию имеют срок в 1 час с момента их создания. Время жизни ссылки определяется системным свойством s3.presigned.link.lifetime.

Атрибут Публичное на форме записи Вложений определяет публичность вложений.

Чтобы сформировать ссылку на скачивание вложения через API, используйте метод getAttachmentUrlById().

примечание

В зависимости от публичности вложения, могут быть созданы две ссылки:

  • для непубличных вложений: https://s3-{your-instance-url}/attachment/9/b7/prp5bikeyg70mpn7mhfszi4amgzleo?response-content-disposition=inline%3B_filename%3D%22image.png...
  • для публичных вложений: https://s3-{your-instance-url}/public-attachment/9/b7/prp5bikeyg70mpn7mhfszi4amgzleo?response-content-disposition=inline%3B_filename%3D%22image.png...

При скачивании непубличного вложения по прямой ссылке система проверяет право чтения записи вложения и, если вложение привязано к записи, право чтения этой записи. На файлы полей типа Image проверка не распространяется. Чтобы отключить проверку прав, установите свойству platform.attachments.acl.enabled значение false. Наличие файла проверяется и при выключенной проверке.