我正尝试在lambda node js中使用亚马逊网络服务的s3镜像,但是它抛出了一个错误‘没有这样的文件或目录’。但我已将该映像设置为公共映像,并授予所有权限。
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');
};发布于 2017-04-29 20:59:11
fs是node js文件系统的核心模块。它用于在本地机器上写入和读取文件。这就是为什么它会给你这个错误。
发布于 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对象,以下是您的一些选择:
我喜欢预签名URL的方法。我觉得你应该去看看。您可能还想检查AWS lambda documentation
发布于 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 =
如果没有存储桶,您应该创建一个存储桶来授予权限。
https://stackoverflow.com/questions/43695893
复制相似问题