在将文件上传到 S3 之前重命名文件

renaming file before uploading it in S3

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

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

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

如果没有并且您正在使用适用于浏览器的 AWS 开发工具包,您可以执行以下操作:

<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 to generate an unique short id, see this post if you want to create your own implementation create uuid in js

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

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

问候!