我正在使用AWS Lambda并将从Lambda函数中读取一些文件。
即使无法读取png文件,也可以读取文本文件。这似乎有点奇怪。 AWS lambda是否无法读取PNG文件?
我做了以下过程:
要上传到AWS Lambda,请归档项目。
$ ls -1
index.js
test.png
test.txt
$ cat index.js
exports.handler = function(event, context) {
var fs = require('fs');
var path = __dirname + '/test.txt';
fs.readFile(path, function(err, buffer) {
console.log('err = ' + err);
console.log(buffer.length);
context.done();
});
}
$ zip -r lambda.zip .
adding: index.js (deflated 35%)
adding: test.png (deflated 1%)
adding: test.txt (stored 0%)
将存档文件上传到AWS Lambda并调用该函数。
调用结果成功。
START RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0
2015-07-09T10:49:24.660Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 err = null
2015-07-09T10:49:24.661Z 2997ce37-2628-11e5-9e15-456a1ab0c0d0 5
END RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0
REPORT RequestId: 2997ce37-2628-11e5-9e15-456a1ab0c0d0 Duration: 123.68 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 9 MB
Cnahge从test.txt读取文件到test.png。
将存档文件上传到AWS Lambda并调用该函数。
调用结果失败。
START RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee
2015-07-09T10:47:10.689Z d9d5b6ff-2627-11e5-92ff-85a0d38392ee err = Error: EACCES, open '/var/task/resource/test.png'
END RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee
REPORT RequestId: d9d5b6ff-2627-11e5-92ff-85a0d38392ee Duration: 214.73 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 10 MB
Process exited before completing request
答案 0 :(得分:1)
我认为文件权限有问题。
试试ls -l
AWS Lambda使用v0.10.36
,实际上您可以在本地进行测试。
例如,创建一个test.js
,如下所示:
var handler = require('.').handler;
var ctx = {
done: function () {
console.log('Done');
}
};
handler('', ctx);
对于这种情况,您只需使用test.js
,如下所示:
var fs = require('fs');
var path = __dirname + '/test.png';
fs.readFile(path, function(err, buffer) {
console.log('err = ' + err);
console.log(buffer.length);
context.done();
});