在S3中上传之前重命名文件

时间:2016-03-25 14:24:51

标签: javascript amazon-web-services amazon-s3 aws-lambda

所以我在S3中有一个存储桶,我读到了S3存储桶的推送模型事件,我知道如何将AWS lambda绑定到存储桶上的putObject事件。我的问题是我想在上传到存储桶之前重命名该文件,例如:在名为'example'的我的存储桶中有一个名为'toto.jpeg'的文件,因此如果用户上传另一个具有相同名称的图像,它将覆盖它和lambda函数将在上传到存储桶后接收信息。我不想在客户端重命名该文件。有没有解决方案?

2 个答案:

答案 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}}

希望这可以给你一个想法。

问候!