我正在构建一个应用程序,允许用户创建诸如Twitter之类的帖子。每个帖子最多可以附加10张图像。我需要将所有原始大小的图像存储在Azure blob存储中,但还需要2个较小尺寸(缩略图)的版本才能在应用程序中显示预览。
我的后端是Laravel(PHP),应用程序是android。我对如何执行此操作有一些想法,但是我在每种方法的许多优缺点之间挣扎。我在这里问这是为了知道任何经过实践检验的实现。
一些约束:
仅应在上传所有图像并生成缩略图URL链接之后创建帖子。
在图像上载/处理过程中,用户不必呆在应用程序中。想法是最大程度地减少用户影响。
所有图像都将存储在Azure blob存储中。后端服务可以暂时用于此目的,但是文件不能长时间存储在这些服务器中。
只允许帖子的所有者创建图像斑点。但是图像可以被公众读取。无论如何,这是Azure存储的功能,不需要任何自定义工作。
一些其他问题:
在哪里将图像处理为缩略图的最佳位置-应用程序还是服务器?
Whatsapp / Facebook / Twitter如何在其设计中实现这一目标?
让我知道您是否需要任何其他详细信息,以便采用更好的设计方法。请随时提出任何想法或分享任何资料,以供我阅读类似内容。
答案 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