Filepicker.io中有多个s3存储桶

时间:2013-06-14 23:12:02

标签: filepicker.io

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

这非常hacky,因为它每个文件请求两个额外的请求 - 一个filepicker.stat,另一个调用s3(或你的服务器)。

答案 2 :(得分:1)

@Ben

我正在开发代码,需要进入许多存储桶的文件相同。我在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开发工具包,好消息是亚马逊不会在同一区域内的存储桶之间复制对象。

现在我只需要决定如何从filepicker应用程序桶中删除该对象。我可以使用更多的AWS SDK代码在服务器上执行此操作但由于它将链接保存到filepicker控制台中的对象,因此会很麻烦。或者我可以使用filepicker代码从浏览器中执行此操作。