首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在node js lambda中使用aws s3镜像url?

如何在node js lambda中使用aws s3镜像url?
EN

Stack Overflow用户
提问于 2017-04-29 20:47:37
回答 3查看 1.1K关注 0票数 0

我正尝试在lambda node js中使用亚马逊网络服务的s3镜像,但是它抛出了一个错误‘没有这样的文件或目录’。但我已将该映像设置为公共映像,并授予所有权限。

代码语言:javascript
复制
fs = require('fs');
exports.handler = function( event, context ) {

         var img = fs.readFileSync('https://s3-us-west-2.amazonaws.com/php-7/pic_6.png');
         res.writeHead(200, {'Content-Type': 'image/png' });
         res.end(img, 'binary');
};
EN

回答 3

Stack Overflow用户

发布于 2017-04-29 20:59:11

fs是node js文件系统的核心模块。它用于在本地机器上写入和读取文件。这就是为什么它会给你这个错误。

票数 1
EN

Stack Overflow用户

发布于 2017-04-29 21:54:54

你的代码有很多地方出了问题。

fs是用于文件操作的核心模块,不能用于访问S3。

您似乎在示例中使用了express.js代码。在lambda中,没有定义可用于发送响应的内置res (除非您自己定义它)。

您需要使用context上的方法或新的callback机制。context方法用于较旧的lambda节点版本(0.10.42)。您应该使用较新的节点版本(4.3.2或6.10),它们使用回调参数返回响应。

看起来您也在使用API网关,因此假设您也在使用API网关,那么我将给出一些建议。如果客户端需要访问S3对象,以下是您的一些选择:

  • 使用AWS sdk从S3读取图像,并使用适当的二进制媒体类型返回图像。AWS最近增加了对API网关的二进制数据的支持。查看此link
  • 在您的json响应中将公共S3 URL发送到客户端。考虑S3对象是否需要是公共的。或者
  • 使用S3 sdk生成在配置的持续时间内有效的pre-signed URLs返回给客户端。

我喜欢预签名URL的方法。我觉得你应该去看看。您可能还想检查AWS lambda documentation

票数 0
EN

Stack Overflow用户

发布于 2018-07-25 23:11:45

要从S3获取文件,需要使用S3提供的路径。基本路径为{your-bucket-name}/{your-file-name}.

在您的代码中,您必须替换下一行:

fs.readFileSync('https://s3.amazonaws.com/{your-bucket-name}/pic_6.png');变量img =

如果没有存储桶,您应该创建一个存储桶来授予权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43695893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档