我注意到似乎没有从AWS管理控制台下载整个s3桶的选项。

有什么简单的方法可以把所有东西都装进我的桶里吗?我正在考虑使根文件夹公共,使用wget抓取它,然后再次使它私有,但我不知道是否有更简单的方法。


当前回答

Aws同步是完美的解决方案。它不是双向的。从源头到目的地只有一条路。此外,如果你在bucket中有很多项目,首先创建s3端点将是一个好主意,这样下载就会更快(因为下载不是通过互联网进行的,而是通过内部网进行的),而且不收费

其他回答

对于Windows, S3浏览器是我发现的最简单的方法。这是一款优秀的软件,而且非商业用途是免费的。

我使用了几种不同的方法将Amazon S3数据复制到本地机器,包括s3cmd,到目前为止最简单的方法是Cyberduck。

你所需要做的就是输入你的亚马逊凭证,然后使用简单的界面来下载、上传、同步你的存储桶、文件夹或文件。

如果你只有文件在那里(没有子目录),一个快速的解决方案是选择所有的文件(点击第一个,Shift+点击最后一个),然后按Enter或右键单击并选择打开。对于大多数数据文件,这将直接下载到您的计算机。

这里有一些东西可以下载所有桶,列出它们,列出它们的内容。

    //connection string
    private static void dBConnection() {
    app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
    conn = new AmazonS3Client(app.getAwsCredentials());
    app.setListOfBuckets(conn.listBuckets());
    System.out.println(CONST.getConnectionSuccessfullMessage());
    }

    private static void downloadBucket() {

    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            app.setBucketKey(objectSummary.getKey());
            app.setBucketName(objectSummary.getBucketName());
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                //DOWNLOAD
                try 
                {
                    s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
                    s3Client.getObject(
                            new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
                            new File(app.getDownloadedBucket())
                            );
                } catch (IOException e) {
                    e.printStackTrace();
                }

                do
                {
                     if(app.getBackUpExist() == true){
                        System.out.println("Converting back up file");
                        app.setCurrentPacsId(objectSummary.getKey());
                        passIn = app.getDataBaseFile();
                        CONVERT= new DataConversion(passIn);
                        System.out.println(CONST.getFileDownloadedMessage());
                    }
                }
                while(app.getObjectExist()==true);

                if(app.getObjectExist()== false)
                {
                    app.setNoObjectFound(true);
                }
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
}

/---------------------------- 扩展方法 -------------------------------------/

//Unzip bucket after download 
public static void unzipBucket() throws IOException {
    unzip = new UnZipBuckets();
    unzip.unZipIt(app.getDownloadedBucket());
    System.out.println(CONST.getFileUnzippedMessage());
}

//list all S3 buckets
public static void listAllBuckets(){
    for (Bucket bucket : app.getListOfBuckets()) {
        String bucketName = bucket.getName();
        System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
    }
}

//Get the contents from the auto back up bucket
public static void listAllBucketContents(){     
    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                app.setBackUpCount(app.getBackUpCount() + 1);   
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
    System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}

}

正如Neel Bhaat在这篇博客中解释的那样,有许多不同的工具可以用于此目的。有些是AWS提供的,大多数是第三方工具。所有这些工具都要求您将AWS帐户密钥和秘密保存在工具本身。在使用第三方工具时要非常谨慎,因为你保存的凭证可能会让你失去全部价值,让你完蛋。

因此,我总是建议为此使用AWS CLI。您可以从这个链接简单地安装它。接下来,运行以下命令并在AWS CLI中保存密钥和秘密值。

aws configure

并使用以下命令将AWS S3 Bucket同步到本地计算机。(本地机器应该安装了AWS CLI)

aws s3 sync <source> <destination>

例子:

1)用于AWS S3到本地存储

aws s3 sync <S3Uri> <LocalPath>

2)从本地存储到AWS S3

aws s3 sync <LocalPath> <S3Uri>

3)从AWS s3桶到另一个桶

aws s3 sync <S3Uri> <S3Uri>