Рекомендации по вложениям
Копирование вложений
Для копирования вложений используйте серверные скрипты. Это можно сделать одним из двух способов:
-
Используйте объект 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. Наличие файла проверяется и при выключенной проверке.