Лучший подход к дизайну загрузки изображений в масштабе? - PullRequest
0 голосов
/ 16 марта 2019

Я создаю приложение, которое позволяет пользователям создавать посты, такие как твиттер. К каждому сообщению можно прикрепить до 10 изображений. Мне нужно хранить все изображения в оригинальном размере в хранилище BLOB-объектов Azure, но мне также нужны 2 версии меньшего размера (миниатюры) для отображения предварительных просмотров в приложении.

Мой бэкэнд - Laravel (PHP), а приложение - Android. У меня есть некоторая идея, как это сделать, но я боролся между многими за и против каждого подхода. Я прошу об этом здесь, чтобы узнать любую проверенную и проверенную реализацию.

Некоторые ограничения:

  • Пост должен создаваться только после загрузки всех изображений и создания URL-ссылок в виде миниатюр.

  • Пользователь не должен оставаться в приложении, пока идет загрузка / обработка изображения. Идея состоит в том, чтобы свести к минимуму влияние пользователя.

  • Все изображения должны храниться в хранилище BLOB-объектов Azure. Внутренняя служба может временно использоваться для этой цели, но файлы не могут долго храниться на этих серверах.

  • Только владелец поста может создавать изображения блобов. Но изображения могут быть прочитаны публикой. В любом случае, это функциональность хранилища Azure и не требует никакой специальной работы.

Некоторые дополнительные вопросы:

  • Где лучше всего обрабатывать изображения для миниатюр - приложение или сервер?

  • Как Whatsapp / Facebook / Twitter достигают этого в своем дизайне?

Дайте мне знать, если вам нужны дополнительные детали для лучшего подхода к проектированию. Пожалуйста, не стесняйтесь высказывать любую идею или поделиться любым источником, где я могу прочитать что-то подобное.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вы можете использовать функцию webjob для чтения исходного изображения, создания миниатюр и сохранения их в хранилище BLOB-объектов.

Веб-работа будет инициирована очередью.Итак, когда вы добавляете исходное изображение в BLOB-объект, вы собираетесь добавить сообщение в очередь.

Когда веб-работа завершена с изменением размера, она может переключить поле в базе данных, чтобы сделать его общедоступным.

Поскольку изображения по умолчанию хранятся в хранилище больших двоичных объектов, они будут доступны только для чтения.public.

Ниже приведена старая статья, но с нее можно начать:https://ppolyzos.com/2016/03/22/azure-webjobs-to-resize-an-image-to-multiple-dimensions/

Вы также можете использовать функции Azure:http://jameschambers.com/2016/11/Resizing-Images-Using-Azure-Functions/

Еще одно решение, позволяющее добиться почти того же результата, - использовать Event Grid:https://docs.microsoft.com/en-us/azure/event-grid/resize-images-on-storage-blob-upload-event?tabs=dotnet

0 голосов
/ 16 марта 2019
  • Для загрузки изображений,

При создании публикации вы можете сохранить публикацию в базе данных и использовать механизм синхронизации, например, workmanager, чтобы сначала загрузить изображения, а затем данные публикации. Workmanager будет обрабатывать процесс синхронизации в фоновом режиме.

  • Для миниатюр

Поскольку сообщение создается после загрузки всех изображений, сервер должен создавать эскизы и сохранять ссылки по запросу клиента.

...