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

renaming file before uploading it in S3

本文关键字:重命名 文件 S3      更新时间:2023-09-26

所以我在S3中有一个bucket,我读到了S3 bucket的推送模型事件,我知道如何将AWS lambda绑定到bucket上的putObject事件。我的问题是,我想在文件上传到bucket之前对其进行重命名,例如:在我名为"example"的bucket中,有一个名为"toto.jpeg"的文件,因此,如果用户上传了另一个同名图像,它将覆盖它,lambda函数将在上传到bucket后接收信息。我不想重命名客户端上的文件。有什么解决办法吗?

唯一的解决方案是在上传文件之前指定名称。换句话说,您必须在客户端软件中执行此操作。在这种情况下,Lambda函数对您没有帮助,因为它只有在文件上传后才会被激发。如果您担心重复的名称会导致文件被覆盖,那么您应该在S3存储桶上启用版本控制。

这里的问题是您使用的是NodeJS或PHP这样的后端语言吗?

如果没有,并且您正在使用AWS SDK进行浏览器,则可以执行以下操作:

<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生成一个唯一的shortid,如果您想在js中创建自己的实现create uuid,请参阅本文。

然后你可以在handleName()函数中调用S3上传器函数,如果你想在点击事件中触发和上传,给你的输入一个id,并使用经典的DOM选择器获取文件:document.getElementById('input').files[0];

希望这能给你一个想法。

问候!