【发布时间】: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