生成缩略图并将其上传到节点中的s3存储桶的最佳方法是什么?

时间:2019-02-19 06:46:53

标签: javascript node.js reactjs amazon-s3 aws-lambda

我正在开发一个示例应用程序,其中后端在NodeJ上,前端使用React。该应用程序将处理一堆照片, 因此,用户可以上传照片,后端会将其保存到s3存储桶中。另外,我还需要进行一些转换,例如生成不同大小的缩略图,最有可能是两个100 px * 100px和200px * 200px的缩略图。

话虽如此,处理缩略图生成过程的最佳方法是什么?

我还经历了一些类似cloudinary的工作,这似乎是即时转换图像的好选择。

现在,我对此有一些与最佳做法有关的问题。

  1. 我应该在我的应用服务器(NodeJs)上进行图像上传/转换吗?我问的原因是,我尝试了cloudinary,图片上传甚至没有到达应用服务器。

  2. 或者可以点击应用服务器并在其中生成缩略图,然后 将其上传到s3。

  3. 点击应用服务器,然后将图像上传到s3存储桶并触发 lambda 函数执行所有转换(优点是什么?)

感谢您耐心阅读此问题。我愿意接受任何建议,想法和关注。

1 个答案:

答案 0 :(得分:2)

这取决于您的要求,但是我会尽力指出每种方法的好处和陷阱。

首先,要考虑一些事项:

  • 要上传多少张图片?
  • 多长时间访问一次这些图像和缩略图?
  • 上传缩略图后需要多长时间才能访问缩略图?尽快接近还是可以接受几秒钟的延迟?
  • 这些图像有多大?
  • 更重要的是运行成本或开发成本/时间?

您需要了解所有这些内容才能有效比较。

您的选项实际上并不是三个不同的选项。

选项1是独立的体系结构决策。无论您将所有内容或其他内容通过应用服务器推送回您自己,都由AWS和Cloudinary的前端或后端的SDK来决定。但是,如果您将所有内容都放在前端,请小心如何管理密钥。无论哪种方式都请当心,但这通常是人们忘记的前端代码,每个人都可以看到。

选项2和3与是否作为初始上传的一部分并在您的控制下进行其他工作有关,还是与更多基于事件的体系结构无关地进行关注。

如果您在应用服务器上完成所有工作,请确保其大小合适以应对工作负载,并且在出现任何问题时可以进行重试。这可能是最适合您的工作,并且显然会给服务器带来最大的负载。除非您的吞吐量非常恒定,非常高并且您可以正确地指定它们,否则增加服务器的大小可能会比使用lambda花费更多。

对图像上传的结果具有自动工作流程会使云提供商的职责(至少在重试方面)有点复杂。但是您仍然需要正确调整lambda的大小,以便及时处理所有问题。

两种情况都有大量的代码示例,但AWS lambda(caveat-基于30秒钟的谷歌搜索)可能更多。

您实际上并没有将其称为选项,但是Cloudinary会即时进行图像处理(如您在介绍中所述)。这意味着您实际上不需要创建和保存缩略图,只需在URL中调用具有指定大小的原始图像即可。你能忍受延迟吗?大多数时候几乎无法识别。你能负担得起吗?无论是钱还是用完了您的免费积分。