README.md
Image storage
Универсальный сервис хранения изображений
Характеристики
- Использование хеша на уровне nginx, что позволяет оптимизировать запросы и снизить нагрузку на сервер
- Возможность динамически обрезать и менять размер изображения
- Добавлять логотип и водяные знаки
- Изменять формат и качество изображения
- Автоматический контроль максимального размера изображения (Максимальный размер 2500x1920), с целью сохранения свободного места на диске
Быстрая настройка
1. Установить Git, Docker и Docker-Compose
2. Склонировать проект и перейти в директорию приложения
git clone https://gitflic.ru/project/klopsadmin/image-storage.git imagestorage && cd imagestorage
3. В файле docker-compose.yml задать значения переменных:
HOST: storage.local
BEARER_TOKEN: qwerty
SECRET_KEY_BASE: 11111111111111111
SECRET_DRAGONFLY: 2222222222222222
- SECRET_DRAGONFLY - строка, которая понадобится для генерации ссылок на изображения
- BEARER_TOKEN - токен авторизации, необходимый для сохранения изображений
5. В директории assets изображения заменить на свои (Логотип и водяной знак)
imagestorage
storage
assets
logo.png
watermark_dark.png
watermark_light.png
nginx.conf
docker-compose.yml
6. Авторизоваться в docker по предоставленному токену
Для получения токена, необходимо обратиться в техническую поддержку admin@klops.ru
docker login -u klopsadmin
7. Создать контейнер и запустить приложение, выполнив команду
docker compose up -d
8. Использовать API приложения
Когда ваш контейнер docker запущен, подключитесь к нему по порту 70
.
Для сохранения изображений, используйте данный формат запроса:
POST /api/save HTTP/1.1
Content-Type: application/json
Authorization: Bearer BEARER_TOKEN
{
"image": "data:image/png;base64,[code image]"
}
Примечание:
- Формат запроса json
- Авторизация запроса по Bearer токену
- Изображение должно быть закодировано в Base64
Пример ответ от сервера:
{
"status": "success",
"response": {
"url": "/media/W1siZiIsIjIwMjMvMDcvMjYvOWI5ejN6djIwcV9maWxlLnBuZyJdXQ?sha=683cdfeb501e8849",
"uid": "2023/07/26/9b9z3zv20q_file.png"
}
}
Создание ссылки на загруженное изображение
Url адрес изображения состоит из:
/media/[Закодированная строка параметров в Base64]?sha=[16 символов закодированной строки алгоритмом sha256 с использованием секретного ключа]
Примеры строк с параметрами:
Стандартный набор параметров, с использованием только uid изображения:
[["f","2023/07/26/9b9z3zv20q_file.png"]]
Все значения соответствуют параметрам геометрии imagemagick: https://imagemagick.org/script/command-line-processing.php#geometry
Размер и обрезка картинки:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","thumb","150x100+10+10"]]
Размер картинки:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","thumb","150x100#"]]
Использование водяного знака:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","watermark","150x100"]]
Использование логотипа:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","logo"]]
Формат jpg:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","encode","jpg","-quality 90 -strip -interlace Plane"]]
Формат png:
[["f","2023/07/26/9b9z3zv20q_file.png"],["p","encode","png"]]
Пример закодированной строки параметров в Base64:
W1siZiIsIjIwMjMvMDcvMjYvOWI5ejN6djIwcV9maWxlLnBuZyJdLFsicCIsImxvZ28iXV0=
Генерация sha строки на примере php кода:
# Удалить символы: квадратные скобки, ковычки и запятые ([]",)
$str = "f2023/07/26/9b9z3zv20q_file.pngplogo"
# Генерация хеш-кода на основе ключа, используя метод HMAC
# Имя алгоритма хеширования "sha256"
$sha = hash_hmac('sha256', $str, SECRET_DRAGONFLY);
# Оставить только первые 16 символов
substr($sha, 0, 16);
Пример валидного url адреса изображения:
/media/W1siZiIsIjIwMjMvMDcvMjYvOWI5ejN6djIwcV9maWxlLnBuZyJdLFsicCIsImxvZ28iXV0=?sha=6bc52e6cc23f7b38
Конвейеры
0 успешных
0 с ошибкой