bpa*_*lov 9 amazon-s3 amazon-javascript-sdk aws-sdk aws-lambda
我通过此代码将文件从Android设备上传到S3存储桶
TransferUtility trasnferManager = new TransferUtility(s3, context);
trasnferManager.upload(..,..,..);
Run Code Online (Sandbox Code Playgroud)
之后我将一个lambda触发器附加到S3:ObjectCreated事件.
执行lambda时,我试图通过S3.getObject()函数获取文件.不幸的是,有时我收到" NoSuchKey:指定的密钥不存在: "错误.在此之后,lambda重试几次并成功获取文件并继续执行.
在我看来lambda函数是在S3中的文件可以使用之前执行的吗?但这不应该在设计上发生.S3上的文件上传完成后,应触发触发器.
根据2015年8月4日的公告:
所有Regions中的 Amazon S3存储桶都为新对象的PUTS 提供了读写后一致性,并为覆盖PUTS和DELETES提供了最终一致性.
写入后读取一致性允许您在Amazon S3中创建后立即检索对象.
但在此之前:
除美国标准(更名为美国东部(弗吉尼亚北部))之外的所有地区都支持 上传到Amazon S3的新对象的读写后一致性.
我的水桶在美国东部(弗吉尼亚北部)地区,它是在2015年8月4日之前创建的 .我不知道这可能是问题......
编辑:20.10.2016
根据文档 - EVENTUALLY CONSISTENT READ操作可能会返回NO RESULT,即使之前已完成两个或更多WRITE操作.
在此示例中,W1(写入1)和W2(写入2)都在R1(读取1)和R2(读取2)开始之前完成.对于一致读取,R1和R2都返回color = ruby.对于最终一致的读取,R1和R2可能返回color = red,color = ruby,或者没有结果,具体取决于已经过的时间量.
有时,当文件很大时,会使用分段上传的方式进行上传,并在文件完全上传之前向 lambda 发送触发器。推测与触发Lambda函数的事件有关。在 lambda 函数的事件字段中,确保将 put 和complete 分段上传添加到事件中。
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |