【问题标题】:renaming file before uploading it in S3在 S3 中上传之前重命名文件
【发布时间】:2016-07-13 07:38:36
【问题描述】:

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

【问题讨论】:

  • I don't want to rename the file on the client 是什么意思?
  • @helloV,我的意思是我认为信任客户不是一个好习惯,因为他拥有我们所有的脚本。但是,如果您向我解释为什么会没问题,那就去吧。我不在网络领域工作,所以我有点菜鸟。我的应用程序(客户端)在 angularjs 中。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这里的问题是您使用后端语言作为 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 生成唯一的短 id,如果您想创建自己的实现 create uuid in js,请参阅这篇文章。

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

    希望这能给你一个想法。

    问候!

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2019-10-22
      • 2014-12-19
      相关资源
      最近更新 更多