将图像上传到 S3,然后在 node.js 中调整大小

Vis*_*ood 4 image imagemagick image-processing amazon-s3 node.js

我正在构建一个网站,用户将在其中上传图像,然后图像最终必须存储在 Amazon S3 中。现在,考虑到直接从浏览器上传的可能性,我考虑了以下选项:

  1. 在浏览器中调整为所有三种尺寸,然后直接上传到 S3 - 这有效,但问题是我上传了多个图像,我怀疑这是一个很好的方法。
  2. 将原始图像上传到 S3,在 node.js 中调整大小 - 我想实际上只上传原始图像,然后使用 node.js 来调整大小。

2) 的最佳方法是什么,以便我可以最大限度地减少需要部署的服务的占用空间。

感谢任何指针!

干杯维沙尔

Jon*_*Ong 6

我不会做选项 1 只是因为它对用户体验不利。

我建议如下:只将原始图像上传到 s3,然后当客户端请求调整大小的变体时,从 s3 中检索它,调整大小并通过 CDN 交付给客户端。

这比一次调整它们的大小要好,因为:

  • 也许您想稍后更改尺寸。根据要求调整大小可让您随意更改大小。否则,您将不得不浏览每个图像并重做所有调整大小。
  • 用户不必等到所有图像都调整大小。相反,用户只等待图像从 node.js 服务器上传到 s3,假设您在 aws 上,这很快。
  • 一次调整大小会造成内存峰值。如果你在像 heroku 这样的低内存平台上,你可以很快达到 512mb 内存限制,你的应用程序将交换并变得非常慢。更好地展开调整大小操作。
  • 您只将原件存储在 S3 上。调整大小的版本只是衍生物 - 无需存储它们。

我写了一个库https://github.com/mgmtio/simgr来帮助我在我的应用程序中做到这一点。