NodeJS API通过SFTP

时间:2018-01-15 20:51:08

标签: node.js rest file-upload sftp

我有一个NodeJS REST API,它有用于上传资产(主要是图像)的端点。我通过CDN分配我的资产。我现在如何使用多部分表单调用我的端点/资产/上传,API为资产创建数据库资源,然后使用SFTP将图像传输到CDN源。成功后,我会回复上传资产的网址。

我注意到相对较小的文件最昂贵的操作是通过SFTP连接到原始文件。

所以我的第一个问题是:

1。始终保持连接的存在是一个坏主意,以便我可以 始终重复使用它来同步我的文件。

我的第二个问题是:

2。如果我考虑拥有可以自行处理HTTP请求的CDN来源,让我的API处理SFTP传输到CDN源是不是一个坏主意吗?

1 个答案:

答案 0 :(得分:2)

简答:(1)保持连接存活并不是一个坏主意,但它带来了复杂性。我建议首先尝试不重用连接。并且(2)上传应该通过API,但可能有方法来优化API到CDN传输的方式。

长答案:

<强> 1。始终保持连接处于活动状态是一个坏主意,以便我可以始终重复使用它来同步我的文件。

保持连接活着通常并不是一个坏主意。一般来说,重用连接可以提高网站性能。

然而,它确实带来了一些并发症。您需要确保连接已启动。您需要确保如果连接断开,则重新创建它。在某些情况下,SFTP客户端认为连接仍然存在,但实际上并非如此,您需要重试。您还需要确保在一个请求使用连接时,没有其他请求可以这样做。您可能希望使用一个连接池,以便您可以同时为多个请求提供服务。

如果您很幸运,SFTP客户端库已经处理了这个问题(请参阅它是否支持连接池)。如果你不是,你必须自己做。

我的建议 - 首先尝试不重复使用连接,然后查看网站的性能是否可以接受。如果不是,则考虑重用连接。但要小心。

<强> 2。如果我考虑拥有可以自行处理HTTP请求的CDN来源,让我的API处理SFTP传输到CDN源是不是一个坏主意吗?

由于以下几个原因,让HTTP请求通过API通常是个好主意:

  • 出于安全原因&#39;您希望CDN上传凭据存储在您的API上,而不是存储在您的客户端(网站或移动应用程序)上。您应该假设您可以看到您的网站代码(通过查看源),人们通常可以对移动应用程序进行反编译或反向工程,并且他们将能够在代码中看到您的凭据。
  • 这隐藏了客户端的实现细节,因此您可以在将来更改此设置,而无需更改客户端代码。
@ tarun-lalwani的建议实际上是一个很好的建议 - 使用S3来存储图像,并使用lambda触发器将其上传到CDN。有几个Node.js库允许您通过API的http请求直接将图像流式传输到S3存储桶。这意味着您不必担心计算机实例上的磁盘空间。 关于你对@ tarun-lalwani评论的问题 - 一种方法是使用S3图像url路径,直到lambda函数完成。如果适当授予权限,S3也可以提供图像。然后在lambda函数完成上传到CDN之后,您只需替换数据库中的图像路径。