设计大规模上传图像的最佳方法?

时间:2019-03-16 16:38:29

标签: android laravel design-patterns upload azure-storage

我正在构建一个应用程序,允许用户创建诸如Twitter之类的帖子。每个帖子最多可以附加10张图像。我需要将所有原始大小的图像存储在Azure blob存储中,但还需要2个较小尺寸(缩略图)的版本才能在应用程序中显示预览。

我的后端是Laravel(PHP),应用程序是android。我对如何执行此操作有一些想法,但是我在每种方法的许多优缺点之间挣扎。我在这里问这是为了知道任何经过实践检验的实现。

一些约束:

  • 仅应在上传所有图像并生成缩略图URL链接之后创建帖子。

  • 在图像上载/处理过程中,用户不必呆在应用程序中。想法是最大程度地减少用户影响。

  • 所有图像都将存储在Azure blob存储中。后端服务可以暂时用于此目的,但是文件不能长时间存储在这些服务器中。

  • 只允许帖子的所有者创建图像斑点。但是图像可以被公众读取。无论如何,这是Azure存储的功能,不需要任何自定义工作。

一些其他问题:

  • 在哪里将图像处理为缩略图的最佳位置-应用程序还是服务器?

  • Whatsapp / Facebook / Twitter如何在其设计中实现这一目标?

让我知道您是否需要任何其他详细信息,以便采用更好的设计方法。请随时提出任何想法或分享任何资料,以供我阅读类似内容。

2 个答案:

答案 0 :(得分:0)

  • 要上传图像,

创建帖子时,可以将帖子保存在数据库中,并使用诸如workmanager之类的同步机制先上传图像,然后上传帖子数据。 Workmanager将在后台处理同步过程。

  • 对于缩略图,

在上传所有图像之后创建帖子,因此服务器应创建缩略图并应客户要求保存链接。

答案 1 :(得分:0)

您可以具有Web作业功能,以读取原始图像,创建缩略图并将其存储在Blob存储中。

网络作业将由队列触发。因此,当您将原始图像添加到Blob中时,您将在队列中添加一条消息。

当调整大小后,Webjob可以切换数据库中的一个字段以使其公开。

因为,默认情况下,您将图像存储在Blob存储中,因此它们对于公共用户是只读的。

以下是一篇老文章,但是一个很好的起点:
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/

几乎可以达到相同结果的另一种解决方案是使用事件网格:
https://docs.microsoft.com/en-us/azure/event-grid/resize-images-on-storage-blob-upload-event?tabs=dotnet