我正在尝试在lambda节点js中使用aws 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');
};
答案 0 :(得分:1)
fs
是节点js文件系统核心模块。它用于在本地计算机上写入和读取文件。这就是为什么它会给你这个错误。
答案 1 :(得分:0)
您的代码存在多处问题。
fs
是用于文件操作的核心模块,无法用于访问S3。
您似乎在示例中使用了express.js代码。在lambda中,没有定义内置res
(除非您自己定义),您可以使用它来发送响应。
您需要使用context
上的方法或新的callback
机制。上下文方法用于较旧的lambda节点版本(0.10.42)。您应该使用较新的节点版本(4.3.2或6.10),它使用回调参数返回响应。
看起来你也在使用API网关,所以假设,我会给出一些建议。如果客户端需要访问S3对象,那么这些是您的一些选择:
我喜欢预先签名的网址方法。我想你应该检查一下。您可能还想检查AWS lambda {{3}}
答案 2 :(得分:0)
要从S3获取文件,您需要使用S3为您提供的路径。基本路径为 https://s3.amazonaws.com/ {您的存储桶名称} / {您的文件名称} 。
在代码上,您必须替换下一行:
var img = fs.readFileSync('https://s3.amazonaws.com/ {您的存储桶名称} /pic_6.png');
如果没有存储桶,则应创建一个存储桶以授予权限。