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

问题描述 投票:4回答:3

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

  1. 在浏览器中调整为所有三种尺寸,然后直接上传到S3-可行,但是问题是我正在上传多张图像,我怀疑这是一个好方法。
  2. 将原始图像上传到S3,并在node.js中调整大小-我当时考虑的是实际上仅上传原始图像,然后使用node.js调整大小。

执行2)的最佳方法是什么,以便可以最大程度地减少需要部署的服务的覆盖范围。

感谢任何指针!

欢呼维沙尔

image node.js image-processing amazon-s3 imagemagick
3个回答
5
投票

我不会因为对用户体验不利而选择选项1。

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

这一次可以调整它们的大小,因为:

  • 也许以后您想更改尺寸。根据要求调整大小,您可以随意更改大小。否则,您将不得不遍历每张图像并重做所有调整大小。
  • 用户不必等到所有图像都被调整大小。相反,用户仅等待图像从node.js服务器上载到s3,假设您使用的是aws,这将非常快。
  • 立即全部调整大小会导致内存峰值。如果您使用的是Heroku这样的低内存平台,则可以很快达到512mb的内存限制,并且您的应用程序将交换并变得非常慢。更好地分散大小调整操作。
  • 您仅将原件存储在S3上。调整大小的版本只是衍生产品-无需存储它们。

我已经编写了一个库https://github.com/mgmtio/simgr来帮助我在自己的应用中执行此操作。


1
投票

G'day Vishal,

我想您最大的图像将比您的较小尺寸大得多,后者可能是缩略图或其他。因为图像文件的大小或多或少地随图像的area缩放,所以这种效果将更加明显。

因此,您创建的任何将最大图像从S3中拉出以重新缩放的服务都可能使用比仅从客户端上载所有三个图像的版本更多的S3带宽!因此,仅执行选项1可能更明智。

编辑:如果您确实要避免上传多个文件,我仍然不会使用“直接上传到S3”选项,因为a)您必须在S3和b)上检测新文件。相比,如果您将图像接收到节点应用程序中,然后在其中调整大小,然后将各种大小保存到S3中,则所运送的数据总量将仍然更大。

This question discusses image manipulation in Node.

-----尼克


0
投票

我建议使用Image CDN来加快图像传送。检查here

Amazon S3较慢,图像较重] >>

众所周知,直接提供Web内容时,Amazon S3速度较慢。一之所以慢,是因为一个桶只能放在一个桶中地理位置。创建位置时已选择位置桶。例如,如果您的存储桶是在以下位置的Amazon服务器上创建的加利福尼亚,但是您的用户在印度,那么图像仍然会来自加利福尼亚。此地理距离导致图像变慢在您的网站上加载。

此外,在S3上看到非常重的图像尺寸和高字节大小。人们只能推测原因,但这可能与发布工作流程和S3作为存储空间的便利。

在保持S3的工作流程的同时,使用ImageEngine这样的图像传送方式和便利级别。

当我说实现起来非常简单时,请相信我...我非常重复。

创建帐户后进行必要的设置后,使用ImageEngine域的参考图像

http://wq77sh2y.cdn.imgeng.in/path/image.jpg

使用前缀功能的参考图像

http://wq77sh2y.cdn.imgeng.in/http://example.com/path/image.jpeg
© www.soinside.com 2019 - 2024. All rights reserved.