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.

http://127.0.0.1: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 с ошибкой