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

4
我正在建立一个网站,用户将上传图片,然后这些图片最终存储在Amazon S3上。现在,考虑到可以直接从浏览器上传,我考虑了以下几个选项:
  1. 在浏览器中调整大小并直接上传到S3 - 这可以完成任务,但问题是我要上传多张图片,我觉得这不是一个好的方法。
  2. 将原始图像上传到S3,然后在node.js中进行调整大小 - 我想实际上只上传原始图像,然后使用node.js进行调整大小。
我应该如何做2)才能最小化需要部署的服务的占用空间?欢迎任何指导!
谢谢
Vishal
3个回答

6
我不建议使用选项1,因为它会影响用户体验。
我建议采取如下方案:只将原始图像上传到S3,当客户端请求一个调整大小的变体时,从S3中检索出该变体,进行调整大小,并通过CDN传递给客户端。
这种方法胜过一次性调整大小,因为:
- 也许你以后想改变尺寸。按需调整大小可以随心所欲地更改尺寸。否则,你必须浏览每张图片并重新调整所有大小。 - 用户不必等待所有图片都被调整大小。相反,用户只需要等待图片从Node.js服务器上传到S3,这是快速的,假设你在AWS上。 - 一次性调整大小会创建内存峰值。如果你在像Heroku这样的低内存平台上,很快就会达到512MB内存限制,你的应用程序会交换并变得非常缓慢。最好分散调整大小操作。 - 只在S3上存储原始图像。调整大小后的版本只是派生版本 - 不需要存储它们。
我写了一个库https://github.com/mgmtio/simgr来帮助我在我的应用程序中实现这个方案。

这个仓库发生了什么事? - jordan.baucke

1

你好,Vishal:

我猜你的最大图片比较大,而较小的尺寸可能是缩略图之类的。由于图像文件大小几乎按图像的面积缩放,这种效果会更加明显。

因此,任何从 S3 拉出最大图像进行重新缩放的服务都很可能使用比只从客户端上传所有三个版本更多的 S3 带宽!所以选择方案 1 可能更明智一��。

编辑:如果你真的想避免上传多个文件,即使这样,我也不会使用直接上传到 S3 的选项,因为 a)你将需要检测 S3 上的新文件,b)获取的数据总量仍然会比接收图像到你的 node 应用程序中,在那里调整它,然后将各种尺寸保存到 S3 中,要大。

这个问题讨论了 Node 中的图像处理。

-----Nick


谢谢Nick,然而需要考虑的另一件事是使用移动设备的人们会使用他们的带宽上传。此外,由于图片上传时间较长,用户体验也需要考虑。 - Vishal Sood
只是出于兴趣,您期望的“原始”图像尺寸是多少?缩小后的图像尺寸又是多少? - NickZoic
完全同意您的观点。最好在node.js中调整大小并将不同尺寸上传到S3。 - Samora Dake

0

我建议使用图像CDN来加速图像传输。请在这里查看。

Amazon S3速度慢且图像较大

众所周知,Amazon S3直接提供Web内容时速度较慢。其中一个原因是存储桶仅位于一个地理位置。当您创建存储桶时,会选择位置。例如,如果您的存储桶在加利福尼亚州的Amazon服务器上创建,但您的用户在印度,则图像仍将从加利福尼亚州提供服务。这种地理距离会导致网站上的图像加载缓慢。

此外,在S3上看到非常重的图像并不罕见,具有大尺寸和高字节大小。人们只能推测原因,但可能与出版工作流程以及S3作为存储空间的便利性有关。

使用像ImageEngine这样的图像传输,同时保持S3的工作流程和便利性。

相信我,实现起来非常简单...非常非常简单,我再重复一遍。

一旦您在创建帐户后进行了必要的设置,您所需要做的就是使用ImageEngine域引用图像。

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

使用前缀功能引用图像

http://wq77sh2y.cdn.imgeng.in/http://example.com/path/image.jpeg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接