【问题标题】:Multiple s3 buckets in Filepicker.ioFilepicker.io 中的多个 s3 存储桶
【发布时间】:2013-06-14 23:12:01
【问题描述】:

我需要使用 filepicker.io 上传到多个 s3 存储桶。我发现 a tweet 表明有一种 hacky 但可能的方法来做到这一点。支持还没有回复我,所以我希望这里的人已经知道答案了!

【问题讨论】:

    标签: filepicker.io


    【解决方案1】:

    您是否尝试过生成第二个应用程序/API 密钥?看起来他们将您的 S3/AWS 凭证锁定到应用程序/API 密钥,而不是直接锁定到帐户。

    【讨论】:

    • 是的,这也是我在其他地方读到的。支持刚刚回复我 - 看起来这确实是他们在那条推文中暗示的内容。
    【解决方案2】:

    支持刚刚回复我。除了创建多个应用程序之外没有其他方法可以做到这一点,如果您只是在 prod/staging/dev 之间切换,这没关系,但如果您必须上传到任意存储桶,则不是一个好的解决方案。

    我的解决方案是在文件上传后使用 x-amz-copy-source 标头执行 PUT 请求,将其复制到正确的存储桶中。

    这很 hacky,因为它为每个文件请求两个额外的请求——一个 filepicker.stat 和一个对 s3(或您的服务器)的调用。

    【讨论】:

      【解决方案3】:

      @本

      我正在开发具有相同文件问题的代码,这些文件需要放入许多存储桶中。我在 ASP.net 工作。

      我所做的是拥有一个带有自己的 S3 存储桶的 Filepicker“应用程序”。 我已经在 javascript onSuccess() 函数中对服务器进行了回调(作为参数传递给 filepicker.store())。无论如何,这个回调需要在那里做一些簿记。

      所以我刚刚在服务器端回调代码中添加了一个额外的位,该代码使用 AWS 开发工具包将对象从存储桶文件选择器复制到上传到它的最终目标存储桶。

      这是我用于在存储桶之间移动或复制对象的 C# 代码:

      public bool MoveObject(string bucket1, string key1, string bucket2, string key2 = null)
      {
          bool success = false;
          if (key2 == null) key2 = key1;
          Logger logger = new Logger(); // my logging system
          try
          {
              RegionEndpoint region = RegionEndpoint.EUWest1; // use your region here
              using (AmazonS3Client s3Client = new AmazonS3Client(region))
              {
                  // TODO: CheckForBucketFunction
                  CopyObjectRequest request = new CopyObjectRequest();
                  request.SourceBucket = bucket1;
                  request.SourceKey = key1;
                  request.DestinationBucket = bucket2;
                  request.DestinationKey = key2;
      
                  S3Response response = s3Client.CopyObject(request);
                  logger.Info2Log("response xml = \n{0}\n", response.ResponseXml);
                  response.Dispose(); 
                  success = true;
              }
          }
          catch (AmazonS3Exception ex)
          {
              logger.Info2Log("Error copying file between buckets: {0} - {1}", 
                  ex.ErrorCode, ex.Message);
              success = false;
          }
      
          return success;
      }
      

      还有适用于其他服务器语言的 AWS 开发工具包,好消息是 Amazon 不对在同一区域的存储桶之间复制对象收费。

      现在我只需要决定如何从文件选择器应用程序存储桶中删除对象。我可以使用更多 AWS SDK 代码在服务器上执行此操作,但这会很麻烦,因为它会在文件选择器控制台中留下指向对象的链接。或者我可以使用文件选择器代码从浏览器中执行此操作。

      【讨论】:

      • 感谢您的回复。我现在正在尝试使用 Knox 库使用 Node.js 执行此操作。由于某种原因,请求通过了,我没有收到错误,但没有复制对象。这只是一个 4mb 的视频,所以我认为它不会超过原子复制操作的 5gb 限制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2012-02-28
      • 1970-01-01
      • 2017-02-11
      • 2021-08-14
      • 1970-01-01
      相关资源
      最近更新 更多