Платформа A2v10 довідкова система
EN


Робота з бінарними об'єктами (blob)

Загальна інформація

Бінарний об`єкт (це може бути зображення, вкладення (attachment) тощо) являє собою окрему сутність. У неї є властивості Name, Mime і безпосередньо дані (Stream).

Ця сутність може зберігатися як в окремій таблиці для кожного елементу, так і в загальній таблиці вкладень з додатковою таблицею зв'язків. Для запобігання несанкціонованому доступу до вкладень використовується механізм формуваня токенів доступу. Токен це просто хеш рядка, що містить ідентифікатор поточної сесії, ідентифікатор користувача і додатковий ключ доступу (guid), зв'язаний з цим вкладенням. Простіше за все додати цей ключ у вигляді поля з типом uniqueidentifier і значенням за замовчуванням newid().

Робота з бінарними об'єктами фактично складається з трьох майже незалежних частин.

  1. Отримання самого об'єкта і токена доступу. Тут все просто і можна використовувати стандартні засоби платформи. Однак завантажувати сам потік даних одразу не вийде. Потрібні якісь окремі інструменти для роботи з цим потоком. Найпростіший варіант – завантаження (download) даних по кліку на посилання. Якщо ми працюємо з зображеннями, є сенс показати їх попереднє відображення (Preview). Крім того, для уникнення несанкціонованому доступу необхідно сформувати токен доступу. Для цього в набір даних потрібно включити поле з спеціальним типом !Token. При обробці цього поля система візьме значення (це буде guid) і сформує замість нього токен доступу. Зверніть увагу, що значення цього токена будуть різними в різних сесіях роботи з браузером.
  2. Отримання з сервера байтів (зображення, вкладення) з використанням токена доступу. Використовується для відображення зображень (елементи Image, FileImage ) або просто для їх завантаження за допомогою команди File.
  3. Вивантаження (upload) даних на сервер. Зберігти дані можна де завгодно (наприклад в БД або в Azure Storage). У цього вкладення з'являється ідентифікатор. По ньому можна отримати вміст для завантаження або відображення бінарних даних (зображення, файлу). Зверніть увагу, що в саму модель цей ідентифікатор запишеться тільки при збереженні моделі. Крім ідентифікатора завантаження при збереженні даних сформується токен доступу. Його також потрібно записати в модель (зберігати не потрібно, при завантаженні він все одно сформується заново).

Формати збережених процедур

Для роботи з бінарними даними використовується дві збережені процедури. Одна для читання даних (суфікс .Load), друга для їх запису (суфікс .Update). Зверніть увагу, що процедури роботи з бінарними даними специфічні і не відповідають правилам для побудови моделей.

Процедура .Load

Процедура отримує наступні параметри (імена фіксовані, порядок не має значення):

  • @TenantId int - Id тенанта (тільки в мультитенантному середовищі).
  • @UserId bigint - Id поточного користувача.
  • @Id bigint - Id даних (зображення, вкладення).

Процедура повинна повернути єдиний набір даних з наступними полями (мають значення імена полів, порядок довільний).

  • Id bigint - Id даних (зображення, вкладення).
  • Mime nvarchar(255) - Mime тип даних.
  • Name nvarchar(255) - Найменування набору даних.
  • Stream varbinary(max) - сам потік даних. Може дорівнювати null
  • BlobName nvarcvhar(max) - ім'я набору в зовнішньому сховищі (наприклад Azure Storage). Може дорівнювати null.
  • Token uniqueidentifier - поле для формування токена доступу. Цей елемент повинен відповідати тому, що повертає процедура завантаження моделі, з якої будуть отримуватися ці дані.

Процедура завантаження повинна повернути одне з полів BlobName або Stream. Якщо задано поле BlobName, то дані будуть отримані з зовнішнього сховища (Azure Storage), а значення поля Stream буде проігноровано.

Процедура .Update

Процедура отримує наступні параметри (імена фіксовані, порядок не має значення):

  • @TenantId int - Id тенанта (тільки в мультитенантному середовищі).
  • @UserId bigint - Id поточного користувача.
  • @Name nvarchar(255) - Найменування набору даних.
  • @Mime nvarchar(255) - Mime тип даних.
  • @Stream varbinary(max) - сам потік даних або null, якщо дані збережені у зовнішньому сховищі.
  • @BlobName nvarcvhar(max) - ім'я набору у зовнішньому сховищі або null.

Процедура повинна повернути єдиний набір з наступними полями (мають значення імена полів, порядок не має значення)

  • Id bigint - Id даних (зображення, вкладення).
  • Token uniqueidentifier - поле для формуваня токена доступу.

Дані, які поверне ця процедура, будуть повернені на клієнт, який повинен буде додати їх до своєї моделі даних.

Дивись також

  • Елемент керування Image.
  • Елемент керування FileImage.
  • Елемент керування UploadFile.
  • Команда File.
  • Розділ files файла model.json.