Рекомендации по работе с объектным хранилищем S3
Рекомендации по работе с объектным хранилищем S3 для загрузки видеофайлов цифрового следа
S3 (Simple Storage Service) — это протокол доступа к объектному хранилищу, который позволяет хранить и извлекать данные. В нашем случае хранилище используется для размещения видеофайлов, чтобы в дальнейшем передавать ссылки на них в составе xAPI стейтментов цифрового следа.
Для отправки артефактов (в частности, видеофайлов онлайн-трансляций) используется объектное хранилище CLOUD4Y. Объектное хранилище поддерживает протокол доступа Amazon S3 API. В объектном хранилище данные хранятся без иерархии (каждый объект расположен в пуле данных на одном уровне). Доступ к данным возможен через API.
Доступ к s3 предоставляется вместе с доступом к LRS. Если вы получали доступ к LRS ранее, доступ к s3 можно запросить отдельно.
По запросу на доступ к LRS мы также выдаем доступ к хранилищу S3, если его нет — запросите отдельно на apps@2035.university, указав:
1) Полное название проекта
2) Полное название вашей организации
Вам будет предоставлен логин и пароль. Их необходимо использовать для авторизации в личном кабинете веб-версии по ссылке: https://cmc.objstor.cloud4u.com:8443/Cloudian/
Group Name:
Password:
А также User ID, Access Key ID, Secret Key - эти данные необходимы для загрузки файлов на S3-хранилище. Для отправки по API необходимо использовать эндпоинт: https://s3.objstor.cloud4u.com
User ID: -ИМЯ БАКЕТА-
Access Key ID:
Secret Key:
Способ загрузки видео в s3
Ниже представлен рабочий скрипт на Python с использованием библиотеки boto3. Он загружает файл в указанный бакет с правами доступа private.
Необходимо расположить скрипт с расширением .py в той же папке, где будут находится видео на загрузку.
Редактируемые строки:
При использовании скрипта вам нужно заменить четыре параметра:
1. video_file = указать имя вашего локального видеофайла
2. bucket_name = User ID, указать имя вашего бакета в хранилище
3. aws_access_key_id = Access Key ID, ключ доступа, полученный на apps@2035.university.
4. aws_secret_access_key = Secret Key, ключ доступа, полученный на apps@2035.university.
Остальные строки (конфигурация клиента, endpoint, метод загрузки) изменять не требуется.
Скрипт для загрузки видео:
import boto3
from botocore.client import Config
from botocore.exceptions import ClientError
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def upload_file_with_acl(filename, bucket, object_name=None, acl='private'):
if object_name is None:
object_name = filename
s3_config = Config(
signature_version='s3',
s3={'addressing_style': 'path'}
)
s3_client = boto3.client(
's3',
endpoint_url='https://s3.objstor.cloud4u.com',
region_name='k41',
aws_access_key_id='-ВАШ Access Key ID- ',
aws_secret_access_key='ВАШ Secret Key-',
verify=False,
config=s3_config
)
try:
s3_client.upload_file(
filename,
bucket,
object_name,
ExtraArgs={'ACL': acl}
)
print(f"File {filename} uploaded to {bucket}/{object_name}")
return True
except ClientError as e:
print(f"Error: {e}")
return False
video_file = "ИМЯ ВАШЕГО ФАЙЛА В ФОРМАТЕ .mp4"
bucket_name = "User ID -ИМЯ ВАШЕГО БАКЕТА-"
upload_file_with_acl(video_file, bucket_name)
Формирование ссылки на конкретное, положенное в s3, видео
После успешной загрузки файла, ссылка на него формируется по следующему шаблону:
Ссылка на видео:
https://s3.objstor.cloud4u.com/ИМЯ БАКЕТА (User ID)/НАЗВАНИЕ ВИДЕО.mp4
Прикрепление ссылки на видеоматериал в шаблон "ЦС_Получателя_поддержки_просмотр_видеоконтента"
Шаблон: https://www.postman.com/gold-comet-924936/cs-kb/re...
Ссылка на видео вставляется в цифровой след, в блок attachments.
Ссылка на объект в S3 пишется в поле fileUrl. Это обязательное условие для корректной обработки xAPI стейтмента.
Пример заполненного блока attachments:
"attachments": [
{
"usageType": "http://id.tincanapi.com/attachment/supporting_media",
"display": {
"ru-RU": "Записанная онлайн трансляция"
},
"description": {
"ru-RU": "Ссылка на запись онлайн трансляции"
},
"contentType": "text/html",
"length": 123456,
"fileUrl": "https://s3.objstor.cloud4u.com/ИМЯБАКЕТА(User ID)/НАЗВАНИЕ_ВИДЕО.mp4",
"sha2": "a914802032ce28709ccf566d33cb4c5460a3976a16dcd7e4beb5bfb68191020e"
}
]
Вопрос: Как проверить, что видео точно лежит в S3 и доступно?
Ответ: Существует два способа проверки.
Через браузер: Попробуйте перейти по прямой ссылке, которую сформировали после загрузки. Если файл загружается к вам в загрузки ПК - значит видео расположилось в s3.
С помощью скрипта: Используйте следующий скрипт для программной проверки наличия файла в бакете. В нем необходимо заменить имя файла и имя бакета на ваши данные, а также подставить свои ключи доступа.
import boto3
from botocore.client import Config
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def check_file_in_bucket(filename, bucket):
s3_config = Config(
signature_version='s3',
s3={'addressing_style': 'path'}
)
s3_client = boto3.client(
's3',
endpoint_url='https://s3.objstor.cloud4u.com',
region_name='k41',
aws_access_key_id='-ВАШ Access Key ID- ',
aws_secret_access_key=''ВАШ Secret Key-',
verify=False,
config=Config(signature_version='s3v4')
)
try:
response = s3_client.list_objects_v2(Bucket=bucket)
if 'Contents' in response:
for obj in response['Contents']:
if obj['Key'] == filename:
print(f" Файл '{filename}' найден в бакете '{bucket}'")
print(f" Размер: {obj['Size']} байт")
print(f" Дата: {obj['LastModified']}")
return True
print(f"✗ Файл '{filename}' не найден в бакете '{bucket}'")
return False
except Exception as e:
print(f"Ошибка: {e}")
return False
check_file_in_bucket('ИМЯ ВАШЕГО ФАЙЛА В ФОРМАТЕ .mp4', 'ИМЯ ВАШЕГО БАКЕТА')
Вопрос: Что проверить, если видео грузится медленно?
Ответ: В первую очередь необходимо проверить скорость интернет-соединения на стороне того, кто выполняет загрузку.
Рекомендуется:
Использовать проводное подключение вместо Wi-Fi для большей стабильности, а также проверьте, что в вашем регионе временно не снижается скорость
Временно отключить другие программы и устройства, которые могут потреблять много трафика.
Проверить скорость на speed-test сервисах. Если скорость исходящего соединения низкая, проблема на вашей стороне.
Вопрос: Какая скорость загрузки считается приемлемой?
Ответ: Приемлемой считается скорость, позволяющая загрузить файл за время, не превышающее длительность видео более чем в 1.5-2,5 раза. Для файла размером 1 Гб (примерно 1 час видео в среднем качестве) при скорости интернета 10 Мбит/с загрузка займет около 12-20 минут, что является нормальным показателем. Ориентируйтесь на стабильность соединения и разумное время ожидания.