问题描述
我有一个angular / react客户端和NodeJS服务器。 我的客户会将图像上传到他们的个人资料,我将它们存储在cloudinary中。 我对这里的推荐路径感到好奇,因为我可以看到每种方式都带有pro / cons的2种方式
- 我可以将图像从Web发布到我的NodeJS服务器,然后发布到cloudinary
- 我可以将图像直接从网络上传到cloudinary,然后将URL从客户端传递给我。
方法1更安全-我控制流量/上传量 方法2更快-文件不通过我的服务器路由,直接进入cloudinary
我非常感谢您的想法/评论/推荐用法-因为我无法通过cloudinary找到任何信息...
解决方法
以下是每种方法的优缺点列表。
服务器端上传
优点:
- 在继续上传到Cloudinary之前,您可以使用自己的自定义逻辑和验证
- 您可以轻松地动态应用许多其他优化和转换,而不必为每个所需方案预先设置多个未签名的上传预设
- 如果需要,它允许您在将资产上传到Cloudinary之前将其存储在自己的存储桶中。
缺点:
- 上传需要更长的时间。资产上载两次。一次从客户端浏览器到您的服务器,第二次从您的服务器到Cloudinary。
- 浪费服务器资源(您可能需要为托管服务(即AWS)支付)-计算,带宽,存储。
客户端上传
优点:
- 您已经提到,这样做的速度更快,因为一旦客户端完成资产上传,就完成了上传,而无需从服务器向Cloudinary进行第二次上传。
- 使用Cloudinary的Upload Widget 的可选快速实现
- 您一天上传一个或一百万个上传,这对您的服务器没有影响。您无需担心处理上传队列的瓶颈,扩展服务器,当然,您还可以节省此操作的成本。最重要的是,同时进行上传时,不会影响客户的用户体验和加载时间。
缺点:
- 您必须使用上传预设进行上传。您不能仅在客户端代码中简单地添加/修改Cloudinary的优化和转换参数,除非您签署要求。生成签名只能在服务器端进行,这样您就不会公开公开您的API Secret。因此,这要求您在实际发送请求之前,将每个请求的有效负载发送到服务器,以获取信号。毕竟,尽管不必处理实际的上载,但每个客户端上载毕竟要依赖您的服务器,这会消耗更多资源。
您还应该注意,如果您还使用Admin或Search API,则永远不要从客户端执行这些操作,因为这些是需要完全凭据身份验证的管理操作。因此,如果您确实使用它,那么您将不可避免地需要针对它们的服务器端实现。
总而言之,没有一种方法最终比另一种方法更好。这实际上取决于您的用例,需求和偏好。