所以我在S3中有一个存储桶,我读到了S3存储桶的推送模型事件,我知道如何将AWS lambda绑定到存储桶上的putObject事件。我的问题是我想在上传到存储桶之前重命名该文件,例如:在名为'example'的我的存储桶中有一个名为'toto.jpeg'的文件,因此如果用户上传另一个具有相同名称的图像,它将覆盖它和lambda函数将在上传到存储桶后接收信息。我不想在客户端重命名该文件。有没有解决方案?
答案 0 :(得分:3)
唯一的解决方案是在上传文件之前指定名称。换句话说,您必须在客户端软件中执行此操作。在这种情况下,Lambda函数无法帮助您,因为在文件上传之前它不会被触发。如果您担心导致文件被覆盖的重复名称,则应在S3存储桶上启用版本控制。
答案 1 :(得分:1)
这里的问题是你使用后端语言作为NodeJS还是PHP?
如果没有,并且您正在使用AWS SDK for browser,则可以执行以下操作:
<input type="file" accept="image/*" onchange="handleName(this.files)" />
function handleName (files) {
var file = files[0];
if (file) {
var getExtension = file.name.slice((file.name.lastIndexOf(".") - 1 >>> 0) + 2);
var fName = shortid.generate() + '.' + getExtension;
}
}
请注意我使用shortid生成唯一的短ID,如果您要创建自己的实施create uuid in js,请参阅此帖子。
然后你可以在handleName()
函数中调用你的S3上传器函数,如果你想在click事件中触发和上传,给你的输入一个id并使用经典的DOM选择器获取文件:{{ 1}}
问候!