Бінарний об`єкт (це може бути зображення, вкладення (attachment) тощо)
являє собою окрему сутність. У неї є властивості Name
, Mime
і безпосередньо дані (Stream
).
Ця сутність може зберігатися як в окремій таблиці для кожного елементу, так і в загальній таблиці вкладень з додатковою таблицею зв'язків.
Для запобігання несанкціонованому доступу до вкладень використовується механізм формуваня токенів доступу.
Токен це просто хеш рядка, що містить ідентифікатор поточної сесії,
ідентифікатор користувача і додатковий ключ доступу (guid), зв'язаний з цим вкладенням.
Простіше за все додати цей ключ у вигляді поля з типом uniqueidentifier
і значенням за замовчуванням newid()
.
Робота з бінарними об'єктами фактично складається з трьох майже незалежних частин.
!Token
.
При обробці цього поля система візьме значення (це буде guid) і сформує замість нього токен доступу.
Зверніть увагу, що значення цього токена будуть різними в різних сесіях роботи з браузером.
Для роботи з бінарними даними використовується дві збережені процедури. Одна для читання даних (суфікс .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)
- сам потік даних. Може дорівнювати nullBlobName 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
- поле для формуваня токена доступу.
Дані, які поверне ця процедура, будуть повернені на клієнт, який повинен буде додати їх до своєї моделі даних.
model.json
.