【问题标题】:Accessing a s3 bucket from Node从 Node 访问 s3 存储桶
【发布时间】:2015-06-11 22:43:17
【问题描述】:

我有一个基本节点应用程序,用户在其中登录并能够查看存储在应用程序目录中的文件的链接。文件结构如下所示。

├── 应用程序

├──公开

├── 节点模块

├──安全(文件存储在这里)

├── .ebextensions

├── .elasticbeanstalk

├── package.json

└── app.js

secure/ 目录是我所有文件的存储位置(大约 350mb)。

这里是指向该目录href="/secure/folder/document.pdf"中文件的链接示例

我已将整个 secure/ 文件夹移至 s3 存储桶,以减小应用程序的文件大小。

有人对如何允许我的节点应用程序访问此存储桶有任何建议吗?

我在到secure/ 的所有路由上都有中间件来检查用户是否经过身份验证,因此无法将链接分发给未登录的用户。

这是我的尝试!

var AWS = require('aws-sdk'),
 s3 = new AWS.S3({
   region : 'example_region' 
 });

app.get('/secure/:endpoint',function(req,res){
  var
    Stream = s3.getObject({
      Bucket: 'exampleBucket',
      Key: 'secure/' + req.params.endpoint
    }).createReadStream();
  Stream.pipe(res);
});

我可以访问类似于 href="/secure/userguide.pdf" 的链接,但是当您开始深入文件系统超过 1 级时,例如 href="/secure/foldar1/userguide.pdf",它会引发 404 错误。

【问题讨论】:

  • 为什么不让你的路由像这样:app.get('/secure/:folder/:endpoint',function(req,res){...} ?
  • 谢谢 Kiet,问题是有些文件也有 3-4-5 层深。例如。 href="secure/folder1/folder2/folder3/document.pdf"
  • 在这种情况下,我建议你使用以下路由, app.get('/secure/*', function(req, res){...} ,然后每个请求都以 /secure 开头/ 将附加到此路由器,您可以使用 req.originalUrl 获取路径。
  • 就是这样!哎呀,我以为我永远找不到答案 :) 我如何让这个成为答案?
  • 太棒了,我在这里从 sebko 的问题中找到了答案!哈哈

标签: node.js amazon-s3 amazon-elastic-beanstalk passport.js


【解决方案1】:

将我的评论变成答案,因为这会引导您找到解决方案。

你应该像这样重写你的路由:

app.get('/secure/*', function(req, res){...} 

因此,每个以 /secure/ 开头的请求都将附加到此路由器。然后你可以通过访问 req.originalUrl 来提取路径。

【讨论】:

    【解决方案2】:

    除非我误解了这个问题,否则你不应该这样做。保存文件和 S3 URI 之间的关系,然后在请求文件时获取关系并以 S3 URI 响应。

    如果您想在您的应用程序上实现访问控制,那么您应该从 S3 检索文件并将其提供给客户端,但同样,您应该只保存关系,而不是文件。

    我通常会这样做:

    伪代码:

    var Model = {
      id: {type: "string"},
      file: {type: "string"}
    }
    

    file 是 S3 URI。您可以使用所需的任何类型的访问控制来扩展此模型。

    【讨论】:

    • 谢谢 Luis,你的意思是这样的吗?对不起,我试图在这里发布代码,但它不会让我很好地格式化它! app.get('/myimage',function(req,res){ request('s3-us-west-2.amazonaws.com/my-bucket/…; });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多