如何使用node将文件上传到Amazon S3并获取文件路径

让客户端(浏览器或移动应用程序)直接上传到S3存储桶而无需传递主服务器代码,效率更高。 一种方法:

  • 创建一个S3存储桶以进行上传。 限制对特定IAM角色的访问。
  • 在服务器代码中,使用IAM凭据为HTTP PUT创建签名URL。 AWS S3 Node.js SDK提供了此API。
  • 当客户端请求通过API调用上传时,将此签名的URL提供给客户端。
  • 让客户端对签名的URL执行HTTP PUT。 在此上传过程中,客户端会临时承担IAM角色,并可以写入存储桶。
  • 设置一个AWS Lambda来监听存储桶上的S3事件。 文件上传完成后,将消息和路径发送到主服务器代码。
  • 然后,主服务器可以将文件路径存储在MongoDB中,或者使用您喜欢的任何机制。
  • 另外,Lambda可以将其存储到MongoDB。

Amazon S3可以解决您的问题。 但是您仍然需要一种存储和获取图像的方法。 到目前为止,我想出了两种解决方案(并使用了其中一种):

  • 使用Imgur,它们有一个不错的API,并且是大多数语言中的模块。 这是节点js的教程:imgur-node-api。 有趣的事实:Snapchat使用Imgur(据我所知),这就是为什么每个人都说Snapchat图像永不消失的原因。
  • 使用数据库,亚马逊提供数据库服务,但互联网上的许多其他地方也是如此。 当然,如果要创建像Instagram这样的应用程序,则将使用自己的服务器和它自己的数据库。 如果您想尝试此路径,只需在Google上搜索“数据库托管”。

这是Heroku的Node示例:在Node.js中定向到S3文件上传。 只需阅读S3的文档即可实现它。