0

我正在使用 AWS Lambda,将从 Lambda 函数中读取一些文件。

可以读取文本文件,即使无法读取 png 文件。好像有点奇怪。AWS lambda 是否无法读取 PNG 文件?

我做了以下过程:

  1. 为了上传到 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%)
    
  2. 将存档文件上传到 AWS Lambda 并调用该函数。

  3. 调用结果成功。

    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   
    
  4. 将文件从 test.txt 读取到 test.png。

  5. 将存档文件上传到 AWS Lambda 并调用该函数。

  6. 调用的结果是失败。

    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
    
4

1 回答 1

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();
  });
于 2015-07-16T00:37:57.823 回答