Обработка файлов, загружаемых в чат

Сервис Webim позволяет пользователям и операторам обмениваться различными файлами с помощью чата. В этом материале описаны схемы прохождения трафика при работе с файлами.

В статье используется понятие Webim Server. Это серверное программное обеспечение сервиса Webim (бекэнд). Оно может быть установлено либо на серверах сервиса Webim, либо на серверах заказчика.

Оператор скачивает файл из Webim Server

  1. Оператор начинает скачивать файл из Webim Server.
  2. Веб-фронтэнд отправляет запрос файла по ссылке на веб-сервер Nginx.
    Пример ссылки: '/l/o/download/2dda66441cfc481eb2b3f8a7c33b5df/photo_2019-07-17_18-20-35.jpg'.
  3. Происходит реверсивное проксирование запросов на Python сервис.
  4. Python сервис проверяет наличие файла в файловом хранилище по пути /var/pro/client-data/cd/ACCOUNT_NAME/files и соответствие запрашиваемого имени тому, что хранится в мета-информации, производит дополнительные обработки изображений (при запросе превью изображения отдаёт файл 2dda66441cfc481eb2b3f8a7c33b5df_300x300 в разрешении 300x300 (разрешение по умолчанию)).

Схема работы сервиса при скачивании файла оператором:

Схема скачивания файла оператором

Оператор загружает файл на Webim Server

  1. Оператор начинает загружать файл на Webim Server.
  2. Веб-фронтэнд отправляет файл на /l/o/action.php?action=upload_file веб-сервера Nginx.
  3. Происходит реверсивное проксирование запросов на Python сервис.
  4. Python сервис сохраняет файл и мета-информацию о нём в файловое хранилище. Имя файла генерируется как guid — например, 2dda66441cfc481eb2b3f8a7c33b5df. Мета-информация хранится в файле 2dda66441cfc481eb2b3f8a7c33b5df.desc (в соответствии с примером выше). Список хранимых полей:
    • content_type;
    • внутренний id пользователя;
    • имя файла;
    • guid;
    • объём файла.

    Сервис сохраняет файл по пути /var/pro/client-data/cd/ACCOUNT_NAME/files.

Схема работы сервиса при загрузке файла оператором:

Схема загрузки файла оператором

Пользователь скачивает файл из Webim Server

  1. Пользователь начинает скачивать файл из Webim Server.
  2. Веб-фронтэнд или мобильное приложение (работает через Webim Mobile SDK) отправляет запрос файла по ссылке на веб-сервер Nginx.
    Пример ссылки для веб-фронтэнда: '/l/v/download/2dda66441cfc481eb2b3f8a7c33b5df/photo_2019-07-17_18-20-35.jpg?expires=1564763939&hash=592d5761a5d70ff96ed846e907c59206d83c6d13642a04956425026be3b78739'.
    Пример ссылки для мобильного приложения (работает через Webim Mobile SDK): '/l/v/m/download/2dda66441cfc481eb2b3f8a7c33b5df/photo_2019-07-17_18-20-35.jpg?expires=1564763939&hash=592d5761a5d70ff96ed846e907c59206d83c6d13642a04956425026be3b78739'.
  3. Происходит реверсивное проксирование запросов на Python сервис.
  4. Python сервис проверяет наличие файла в файловом хранилище по пути /var/pro/client-data/cd/ACCOUNT_NAME/files и соответствие запрашиваемого имени тому, что хранится в мета-информации, производит дополнительные обработки изображений (при запросе превью изображения отдаёт отдаёт файл 2dda66441cfc481eb2b3f8a7c33b5df_300x300 в разрешении 300x300 (разрешение по умолчанию)).

Схема работы сервиса при скачивании файла пользователем:

Схема скачивания файла пользователем

Пользователь загружает файл на Webim Server

  1. Пользователь начинает загружать файл на Webim Server.
  2. Веб-фронтэнд отправляет файл на /l/v/upload (/l/v/m/upload для мобильного приложения (работает через Webim Mobile SDK)) веб-сервера Nginx.
  3. Происходит реверсивное проксирование запросов на Python сервис.
  4. Python сервис сохраняет файл и мета-информацию о нём в файловое хранилище. Имя файла генерируется как guid — например, 2dda66441cfc481eb2b3f8a7c33b5df. Мета-информация хранится в файле 2dda66441cfc481eb2b3f8a7c33b5df.desc (в соответствии с примером выше). Список хранимых полей:
    • content_type;
    • внутренний id пользователя;
    • имя файла;
    • guid;
    • объём файла.

    Сервис сохраняет файл по пути /var/pro/client-data/cd/ACCOUNT_NAME/files.

Схема работы сервиса при загрузке файла пользователем:

Схема загрузки файла пользователем