获取 Facebook 图像并将其上传到 Elastic Beanstalk 中的 S3 或 Cloudinary

Posted

技术标签:

【中文标题】获取 Facebook 图像并将其上传到 Elastic Beanstalk 中的 S3 或 Cloudinary【英文标题】:Get facebook images and upload them to S3 or Cloudinary in Elastic Beanstalk 【发布时间】:2018-02-18 23:18:51 【问题描述】:

我想为我的应用程序使用 Elastic Beanstalk 服务。其中一项功能是从 Facebook 下载用户的图像,这一点非常重要。这不仅仅是关于个人资料图片。我想下载所有专辑中的图片。 使用 Facebook SDK,我们必须使用令牌来访问这些图像。 这是问题所在。我不想将图像直接存储在 EBS 实例上。我想将它们直接复制到 S3 或 Cloudinary。我进行了一项研究,似乎我无法远程获取 S3。看来我必须先将其下载到 EBS 实例,然后再上传到 S3。这对我来说听起来不是一个好的解决方案。当然,我可以使用 API Gateway + Lambda 来实现,但我更愿意让它更简单。 在 Cloudinary 中,我们有一个名为 - Fetch Remote 的功能。我不确定它是否适用于 Facebook 图片。我的疑虑来自 Facebook 的安全保护。我不确定我们是否可以在没有令牌/会话的情况下获取这些文件。

问题: 1. 假设我有这些文件/图像的 url,我可以使用 Cloudinary Fetch Remote 功能来获取它们吗? 2. 如何使用 S3 和 Elastic Beanstalk 解决此问题?在将图像上传到 S3 之前,我是否必须将其下载到 Elastic Beanstalk 实例?也许有更好的方法? 3. 您对使用 Amazon EBS 和 S3 或 Cloudinary 的最佳解决方案有何建议?

【问题讨论】:

【参考方案1】:

在不了解您的应用程序和堆栈的情况下,我不知道这是否可行,但如果您有一个基于 JS 的前端,并且前端在需要之前获取图像(例如显示图像)要上传到 S3,一个好的解决方案是让您的前端将图像直接上传到 S3。

基本上前端会请求你的服务器对 S3 URL 进行签名,然后它会直接进行上传。

您将必须实现类似于图像上传器所做的事情(请参阅https://fineuploader.com/),但在您的情况下,用户不会拖动图像,而是您只需从内存中上传它(因为它已经从 Facebook 下载以显示在您的前端)。

同样,这假设图像已下载到前端以显示给用户,因此您可以在客户端进行上传。

【讨论】:

我们有一个前端(React 原生应用程序),但我们想下载所有图像并在后端处理它们(仅使用移动应用发送的令牌)。【参考方案2】:
    假设我有这些文件/图像的 URL,我可以使用 Cloudinary Fetch Remote 功能来获取它们吗?

大概吧。我不明白为什么不。为什么不试试呢?

    如何使用 S3 和 Elastic Beanstalk 解决此问题?我必须先将图像下载到 Elastic Beanstalk 实例吗 上传到S3?也许有更好的方法?

您必须先将其下载到某个地方,然后将其上传到 S3。没有其他/更好的方法。某些服务必须下载文件并上传到 S3,可以是 Elastic Beanstalk 或 AWS Lambda 函数,但 S3 不会自行下载文件。

    您对使用 Amazon EBS 和 S3 或 Cloudinary 的最佳解决方案有何建议?

这主要是基于意见的,这与本网站无关。这完全取决于您想要什么功能,以及您愿意支付多少费用。

【讨论】:

问题 EBS 并非专门用于此类用例。我的意思是直接将大量文件下载到实例中,进行图像处理,然后将上传迁移到其他服务器/S3。我可以想象我有 100 万用户和大量文件首先要存储在 EBS 上。磁盘大小会花费很多。

以上是关于获取 Facebook 图像并将其上传到 Elastic Beanstalk 中的 S3 或 Cloudinary的主要内容,如果未能解决你的问题,请参考以下文章

通过 android 应用程序共享图像时 Facebook 上传失败错误

如何从 NativeScript 中的 Image 获取文件并将其上传到服务器

无法从 Facebook 载波上传图片

在 iOS 中更快地从 facebook 获取图像

使用 API 获取 Facebook 头像并将其保存到项目文件夹

facebook graph api - 在页面上获取用户发布的图像