天道酬勤,学无止境

List all objects in AWS S3 bucket

I am trying to figure out how to list all the objects from an AWS S3 bucket in Swift. I can't seem to find the information anywhere on the internet, but maybe I didn't look hard enough. If anyone could refer me to the code that will allow me to do this that would be great.

评论

Don't know if you still need it but here you go:

let credentialsProvider = AWSStaticCredentialsProvider(accessKey: "ACCESS KEY", secretKey: "SECRET KEY")
    let configuration = AWSServiceConfiguration(region: .USWest2, credentialsProvider: credentialsProvider)
    AWSS3.registerS3WithConfiguration(configuration, forKey: "defaultKey")
    let s3 = AWSS3.S3ForKey("defaultKey")

    let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
    listRequest.bucket = "BUCKET"

    s3.listObjects(listRequest).continueWithBlock { (task) -> AnyObject? in
        print("call returned")
        let listObjectsOutput = task.result;
        for object in (listObjectsOutput?.contents)! {

            print(object.key)
        }

        return nil
    }

(Thanks to Daniel for reminding me not to use deprecated code) ;)

Jan-Dawid's answer is great - however, if you want your Bucket NOT to be publicly available to everyone and still get the object-list then you have to do some more stuff (especially in the AWS settings) for this to happen (see list of things you have to do below....).

Or in other words, how do you get all the objects listed in Swift having your bucket set to publicly restricted as shown in this image (i.e. NO public ACCESS)

There is a way you can do that in Swift without AWS user-login setup needed in your app:

Create an iOS App or open the one you want your bucket-object list to appear:

Type the following code:

let myIdentityPoolId = "eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5"
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_REGION, identityPoolId: myIdentityPoolId)
let configuration = AWSServiceConfiguration(region: .YOUR_REGION, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration

AWSS3.register(with: configuration!, forKey: "defaultKey")
let s3 = AWSS3.s3(forKey: "defaultKey")

let listRequest: AWSS3ListObjectsRequest = AWSS3ListObjectsRequest()
listRequest.bucket = "YOUR_BUCKET_NAME"

s3.listObjects(listRequest).continueWith { (task) -> AnyObject? in
    for object in (task.result?.contents)! {
        print("Object key = \(object.key!)")
    }
    return nil
}

(of course, you need to do some cosmetics to handle the case where no results should appear - but I leave that up to you.

Do make sure you have AWSS3 imported:

import AWSS3

After that, you need to do a whole set of steps inside the AWS Service pages in order for your code to really retrieve the desired bucket-objects list. Here is a step-by-step guidance :

Roughly, do the following:

  1. Create a S3 Bucket
  2. Add items to it (the objects you want to have listed)
  3. In the bucket Access-control turn off all read&write access (as in image above)
  4. Go to AWS Cognito main page and choose: Manage Federated Identities

(By the way, all these AWS main-pages can best be found going to the AWS-Services page and typing the words "Cognito" or "IAM" or "S3" into the search bar. These 3 are all you need)

But let's continue....

  1. Inside "Manage Federated Identities", create a new identity pool (i.e. provide a name - AND DON'T FORGET TO TAG "Enable access to unauthenticated identities" (you can view the details and leave them unchanged) -> Press Allow!

  2. Little EXTRA: In case you mess anything up and want to restart: There is a slight chance that the above step-Nr.6 does not work a second time with the same name. In that case, I recommend going to the "IAM" main page and there, also delete the 2 roles connected to your identity pool (i.e. under Roles in IAM-main-page). After the deletion of the roles, you can restart creating an identity-pool!)

  3. A second little EXTRA: Througout all we do right here, please make sure that all your AWS-main-service pages are within the same region !!! (normaly the AWS-webpages start with something like https://eu-central-1. or https://us-west2. etc. Make sure they are consistent throughout !

But let's continue:

  1. After identity-pool creation you should get an id for it (i.e. something like: eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5 (make sure you keep note of this id)

  2. Inside the "IAM"-main page, under the Roles menu, you find 2 roles (that were created by step-5-8) - click on the Unauth one of the two (you see there is an Auth and and Unauth one)

  3. Once the Unauth is clicked you get to the Summary page: There please keep note of the Role ARN (something like arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role)

  4. Having the id's in hand you kept, go to the AWS-Policy-Generator page.

  5. There, start filling you the Policy-Generator Form:

    12a. Select S3 Bucket Policy as the type

    12b. Chose Effect Allow

    12c. In the prinicpal-field, paste the Role-ARN you obtained in Step-10 (something like arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role)

    12d. Amazon Service field should be Amazon S3 (leave tag deselected)

    12e. Actions should be ListObjects (or ListBuckets depending of what you want to do...)

    12f. The Amazon Resource Name (ARN) should be arn:aws:s3:::YOUR_BUCKET_NAME (if you want all files from your bucket eventually listed in Swift, then leave the blank>

    12g. Press Add statement button

    12h. Press Create Policy button (that should generate a JSON-file)

Something like that:

{
  "Id": "Policy2846208763429",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt98475983711245435",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME",
      "Principal": {
        "AWS": [
          "arn:aws:iam::274937169435:role/Cognito_YOURIDPOOLNAMEUnauth_Role"
        ]
      }
    }
  ]
}
  1. With this Policy JSON-file in hand, go back to your "S3" bucket main page

  2. Inside "S3" main page, go under --> "Persmissions" and press the tab "Bucket Policy"

  3. Replace anything written inside the Bucket Policy tab's editor window - and paste your Policy-JSON File (from Step 12h. into it)

  4. After pasing the JSON make sure you press "Save"

---> HERE WE GO !! THE SWFIT CODE SHOULD NOW RETRIEVE ALL BUCKET FILES IN THE RETURN TASK ANSWER !!!!!

  1. Optional: If you need any other AWS Services inside your iOS App, it is recommended that you use the following entry inside your info.plist file (providing the correct identity-pool id and region)

Step Nr17 is not really necessary if you only want to fetch the object list of your bucket.

    <key>AWS</key>
    <dict>
        <key>CredentialsProvider</key>
        <dict>
            <key>CognitoIdentity</key>
            <dict>
                <key>Default</key>
                <dict>
                    <key>PoolId</key>
                    <string>eu-central-1:368293ad-f278-35ae-2678-6d40d48de2g5</string>
                    <key>Region</key>
                    <string>eu-central-1</string>
                </dict>
            </dict>
        </dict>
        <key>S3TransferUtility</key>
        <dict>
            <key>Default</key>
            <dict>
                <key>Region</key>
                <string>eu-central-1</string>
            </dict>
        </dict>
    </dict>

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 列出Amazon S3存储桶中所有文件的快速方法?(Quick way to list all files in Amazon S3 bucket?)
    问题 我有一个亚马逊s3存储桶,其中包含成千上万个文件名。 获取列出存储桶中所有文件名的文本文件的最简单方法是什么? 回答1 我建议使用boto。 然后是几行python: from boto.s3.connection import S3Connection conn = S3Connection('access-key','secret-access-key') bucket = conn.get_bucket('bucket') for key in bucket.list(): print key.name.encode('utf-8') 将此另存为list.py,打开一个终端,然后运行: $ python list.py > results.txt 回答2 AWS CLI AWS S3 LS的文档 AWS最近发布了其命令行工具。 这就像boto一样工作,可以使用sudo easy_install awscli或sudo pip install awscli 安装完成后,您就可以直接运行 aws s3 ls 它将向您显示所有可用的存储桶 CreationTime Bucket ------------ ------ 2013-07-11 17:08:50 mybucket 2013-07-24 14:55:44 mybucket2 然后,您可以查询特定存储桶中的文件。 命令
  • 如何使用CLI在AWS S3中删除版本存储桶?(How do I delete a versioned bucket in AWS S3 using the CLI?)
    问题 我都尝试过s3cmd : $ s3cmd -r -f -v del s3://my-versioned-bucket/ 以及AWS CLI: $ aws s3 rm s3://my-versioned-bucket/ --recursive 但是这两个命令都只是向S3添加DELETE标记。 用于删除存储桶的命令也不起作用(从AWS CLI): $ aws s3 rb s3://my-versioned-bucket/ --force Cleaning up. Please wait... Completed 1 part(s) with ... file(s) remaining remove_bucket failed: s3://my-versioned-bucket/ A client error (BucketNotEmpty) occurred when calling the DeleteBucket operation: The bucket you tried to delete is not empty. You must delete all versions in the bucket. 好吧怎么办? 他们的文档中没有关于此的信息。 S3Cmd表示这是一个“功能齐全”的S3命令行工具,但除其自身版本外,未引用任何其他版本。
  • 列出带有boto3的存储桶的内容(Listing contents of a bucket with boto3)
    问题 我如何才能看到带有boto3 S3中的存储桶中有boto3 ? (即"ls" )? 执行以下操作: import boto3 s3 = boto3.resource('s3') my_bucket = s3.Bucket('some/path/') 返回: s3.Bucket(name='some/path/') 我如何看其内容? 回答1 一种查看内容的方法是: for my_bucket_object in my_bucket.objects.all(): print(my_bucket_object) 回答2 这类似于“ ls”,但不考虑前缀文件夹约定,并将列出存储桶中的对象。 它留给阅读器以过滤掉作为键名称一部分的前缀。 在Python 2中: from boto.s3.connection import S3Connection conn = S3Connection() # assumes boto.cfg setup bucket = conn.get_bucket('bucket_name') for obj in bucket.get_all_keys(): print(obj.key) 在Python 3中: from boto3 import client conn = client('s3') # again assumes boto.cfg setup
  • 如何知道一个S3存储桶中存储了多少个对象?(How can I tell how many objects I've stored in an S3 bucket?)
    问题 除非我没有丢失任何东西,否则看来我看过的所有API都不会告诉您<S3 bucket>/<folder>中有多少个对象。 有什么方法可以计数吗? 回答1 没有办法,除非你 将它们全部以1000的批次列出(这可能很慢并且占用带宽-亚马逊似乎永远不会压缩XML响应),或者在S3上登录到您的帐户,然后转到“帐户-使用情况”。 帐单部门似乎确切知道您存储了多少个对象! 如果存储了5000万个对象,那么简单地下载所有对象的列表实际上将花费一些时间并花费一些钱。 另请参阅关于StorageObjectCount的此线程-在使用情况数据中。 一个S3 API至少需要一些基础知识,即使它已经使用了几个小时,也还是不错的。 回答2 使用AWS CLI aws s3 ls s3://mybucket/ --recursive | wc -l 或者 aws cloudwatch get-metric-statistics \ --namespace AWS/S3 --metric-name NumberOfObjects \ --dimensions Name=BucketName,Value=BUCKETNAME \ Name=StorageType,Value=AllStorageTypes \ --start-time 2016-11-05T00:00 --end-time 2016-11
  • 如何在Rails上使用AWS-SDK gem列出s3文件夹中的所有文件(How to list all files in an s3 folder using AWS-SDK gem in ruby on rails)
    问题 我想显示s3文件夹中所有文件的列表,以便可以获取所有最近的修改日期,以便确定哪些文件已更改。 我尝试使用objects.with_prefix('Folder1')它给我完整的列表,但也包含Folder1.1键 我不知道我是否需要使用定界符,但找不到任何在AWS SDK中使用定界符的方法。 提前非常感谢! 我正在使用'aws-sdk'gem 这是我的存储桶结构-Folder1 -File1 -File2 -Folder.1.1 这是我的代码 bucket = s3.buckets[bucket_name] data = bucket.objects.with_prefix('Folder1/') data.each do |object| puts "#{object.key}\t#{object.last_modified}"; end 回答1 答案太迟了,但总比没有好。 你可以做 s3_bucket.objects.with_prefix('folder_name').collect(&:key) 根据官方文件在这里 更新: SDK V3 s3 = Aws::S3::Client.new resp = client.list_objects_v2({ bucket: "BucketName", # required prefix: "FolderName", }) 回答2
  • 从S3 CLI获取最后修改的对象(get last modified object from S3 CLI)
    问题 我有一个用例,其中我以编程方式调出EC2实例,从S3复制和可执行文件,运行它并关闭该实例(在用户数据中完成)。 我只需要从S3获取最后添加的文件。 有没有办法使用CLI从S3存储桶中获取最后修改的文件/对象? 回答1 您可以使用aws s3 ls $BUCKET --recursive存储桶中的所有对象: $ aws s3 ls $BUCKET --recursive 2015-05-05 15:36:17 4 an_object.txt 2015-06-08 14:14:44 16322599 some/other/object 2015-04-29 12:09:29 32768 yet-another-object.sh 它们是按键按字母顺序排序的,但是第一列是最后修改的时间。 快速sort将按日期sort它们重新排序: $ aws s3 ls $BUCKET --recursive | sort 2015-04-29 12:09:29 32768 yet-another-object.sh 2015-05-05 15:36:17 4 an_object.txt 2015-06-08 14:14:44 16322599 some/other/object tail -n 1选择最后一行, awk '{print $4}'提取第四列(对象的名称)。 $ aws s3 ls
  • 如何从S3存储桶中递归删除文件(How to delete files recursively from an S3 bucket)
    问题 我在S3中具有以下文件夹结构。 有没有一种方法可以递归地删除某个文件夹下的所有文件(例如foo/bar1 or foo or foo/bar2/1 ..) foo/bar1/1/.. foo/bar1/2/.. foo/bar1/3/.. foo/bar2/1/.. foo/bar2/2/.. foo/bar2/3/.. 回答1 使用最新的aws-cli python命令行工具,以递归方式删除存储桶中某个文件夹下的所有文件仅是: aws s3 rm --recursive s3://your_bucket_name/foo/ 或删除存储桶下的所有内容: aws s3 rm --recursive s3://your_bucket_name 如果您要实际删除存储桶,则有一个步骤的快捷方式: aws s3 rb --force s3://your_bucket_name 它将以递归方式删除该存储桶中的内容,然后删除该存储桶。 注意:这些命令需要s3://协议前缀才能工作 回答2 过去,每个密钥(文件)都需要专用的API调用,但是由于2011年12月推出了Amazon S3-多对象删除,因此大大简化了该操作: Amazon S3的新多对象删除功能使您能够通过一个请求从S3存储桶中删除多达1000个对象。 请参阅我对使用api php和通配符从S3删除相关问题的答案
  • Boto3从S3存储桶下载所有文件(Boto3 to download all files from a S3 Bucket)
    问题 我正在使用boto3从s3存储桶中获取文件。 我需要类似的功能,例如aws s3 sync 我当前的代码是 #!/usr/bin/python import boto3 s3=boto3.client('s3') list=s3.list_objects(Bucket='my_bucket_name')['Contents'] for key in list: s3.download_file('my_bucket_name', key['Key'], key['Key']) 只要存储桶中只有文件,就可以正常工作。 如果存储桶中存在文件夹,则抛出错误 Traceback (most recent call last): File "./test", line 6, in <module> s3.download_file('my_bucket_name', key['Key'], key['Key']) File "/usr/local/lib/python2.7/dist-packages/boto3/s3/inject.py", line 58, in download_file extra_args=ExtraArgs, callback=Callback) File "/usr/local/lib/python2.7/dist-packages/boto3/s3
  • 如何找到我的AWS S3存储桶或文件夹的总大小?(How do I find the total size of my AWS S3 storage bucket or folder?)
    问题 亚马逊是否提供一种简单的方法来查看我的S3存储桶或文件夹使用了多少存储空间? 这样我就可以计算成本等。 回答1 两种方式 使用AWS CLI aws s3 ls --summarize --human-readable --recursive s3://bucket/folder/* 如果最后省略/ ,它将得到以您的文件夹名称开头的所有文件夹,并给出所有文件的总大小。 aws s3 ls --summarize --human-readable --recursive s3://bucket/folder 使用Boto3 API import boto3 def get_folder_size(bucket, prefix): total_size = 0 for obj in boto3.resource('s3').Bucket(bucket).objects.filter(Prefix=prefix): total_size += obj.size return total_size 回答2 亚马逊已经更改了Web界面,因此现在您可以在“更多”菜单下找到“获取尺寸”。 回答3 自2015年7月28日起,您可以通过CloudWatch获得此信息。 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start
  • Python boto,在存储桶中列出特定目录的内容(Python boto, list contents of specific dir in bucket)
    问题 我只能通过S3访问S3存储桶中的特定目录。 例如,如果我尝试列出整个存储桶,请使用s3cmd命令: $ s3cmd ls s3://bucket-name 我收到错误消息: Access to bucket 'my-bucket-url' was denied 但是,如果我尝试访问存储桶中的特定目录,则可以看到以下内容: $ s3cmd ls s3://bucket-name/dir-in-bucket 现在,我想使用python boto连接到S3存储桶。 与以下内容相似: bucket = conn.get_bucket('bucket-name') 我收到一个错误: boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 但是,如果我尝试: bucket = conn.get_bucket('bucket-name/dir-in-bucket') 脚本停顿约10秒钟,然后打印出错误。 波纹管是完整的痕迹。 知道如何进行此操作吗? 注意问题是关于boto版本2模块,而不是boto3。 Traceback (most recent call last): File "test_s3.py", line 7, in <module> bucket = conn.get_bucket('bucket-name
  • 使用boto3在两个AWS S3存储桶之间移动文件(Move files between two AWS S3 buckets using boto3)
    问题 我必须使用Python Boto API在一个存储桶之间将文件移动到另一个存储桶。 (我需要它从第一个存储桶中“剪切”文件,并在第二个存储桶中“粘贴”文件)。 最好的方法是什么? **注意:如果我有两个不同的ACCESS KEYS和SECRET KEYS,那有关系吗? 回答1 如果您使用的是boto3(较新的boto版本),这非常简单 import boto3 s3 = boto3.resource('s3') copy_source = { 'Bucket': 'mybucket', 'Key': 'mykey' } s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') (文档) 回答2 我认为boto S3文档回答了您的问题。 https://github.com/boto/boto/blob/develop/docs/source/s3_tut.rst 通过boto将文件从一个存储桶移动到另一个存储桶实际上是将密钥从源复制到目标,然后从源中删除密钥。 您可以访问存储桶: import boto c = boto.connect_s3() src = c.get_bucket('my_source_bucket') dst = c.get_bucket('my_destination_bucket')
  • 资源,客户端和会话之间的boto3差异?(Difference in boto3 between resource, client, and session?)
    问题 我在Ubuntu 16.04 LTS中使用Python 2.7.12。 我正在通过以下链接学习如何使用boto3:https://boto3.readthedocs.io/en/latest/guide/quickstart.html#using-boto-3。 我的疑问是何时使用资源,客户端或会话及其各自的功能。 回答1 客户端和资源是boto3 SDK中用于发出AWS服务请求的两种不同的抽象。 您通常会选择使用客户端抽象或资源抽象。 我在下面概述了客户端和资源之间的区别,以帮助读者决定使用哪个。 会话在很大程度上与“客户端”和“资源”的概念正交(但两者均使用)。 这里是有关客户端,资源和会话的全部更详细的信息。 客户: 这是原始的boto3 API抽象提供低级AWS服务访问客户端支持所有AWS服务操作向开发人员展示botocore客户端通常使用AWS服务API 1:1映射蛇形方法名称(例如ListBuckets API => list_buckets方法) 从AWS服务描述生成 这是一个客户端级别对S3存储桶对象的访问的示例: import boto3 client = boto3.client('s3') response = client.list_objects_v2(Bucket='mybucket') for content in response[
  • 列出Amazon S3上特定文件夹中的对象(List objects in a specific folder on Amazon S3)
    问题 我正在尝试获取我的存储桶中特定文件夹下的Object列表。 我知道要获取我所有对象的列表,请执行以下操作: $objects = $client->getIterator('ListObjects', array( 'Bucket' => $bucket )); 我只想获取文件夹my/folder/test下的对象。 我尝试添加 'key' => "my/folder/test", 和 'prefix' => "my/folder/test", 但这只是返回我存储桶中的所有对象。 回答1 您需要使用“ Prefix将搜索限制到特定目录(公用前缀)。 $objects = $client->getIterator('ListObjects', array( "Bucket" => $bucket, "Prefix" => "your-folder/" )); 回答2 答案在上面,但是我想我会提供一个完整的工作示例,可以将其复制并直接粘贴到php文件中并运行 use Aws\S3\S3Client; require_once('PATH_TO_API/aws-autoloader.php'); $s3 = S3Client::factory(array( 'key' => 'YOUR_KEY', 'secret' => 'YOUR_SECRET', 'region' => 'us
  • 您如何搜索亚马逊S3铲斗?(How do you search an amazon s3 bucket?)
    问题 我的存储桶中有成千上万个文件。 如何搜寻水桶? 有没有可以推荐的工具? 回答1 S3没有本机的“搜索此存储区”,因为实际内容是未知的-而且,由于S3是基于键/值的,因此无法立即使用本机方式访问许多节点以及提供(SELECT * FROM ... WHERE ...) (在SQL模型中)。 您需要执行的是执行ListBucket以获取存储桶中的对象列表,然后遍历执行您实现的自定义操作(即搜索)的每个项目。 回答2 只需在此处添加一条便条:现在已经3年了,但是当您键入“如何搜索S3存储桶”时,这篇文章在Google中排名第一。 也许您正在寻找更复杂的东西,但是如果您试图通过标题找到一个简单的对象(文件),那么这很简单: 打开存储桶,在右侧选择“无”,然后开始输入文件名。 http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html 回答3 这是使用AWS CLI来搜索文件名的一种简短而丑陋的方法: aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32- 回答4 (至少)有两种不同的用例,它们可以描述为“搜索存储桶”: 在存储在存储桶中的每个对象中搜索内容; 这假定该存储桶中的所有对象(例如文本文件
  • s3中的getObject时,aws lambda函数获得的访问被拒绝(aws lambda function getting access denied when getObject from s3)
    问题 我在Lambda函数上收到来自S3 AWS服务的拒绝访问错误。 这是代码: // dependencies var async = require('async'); var AWS = require('aws-sdk'); var gm = require('gm').subClass({ imageMagick: true }); // Enable ImageMagick integration. exports.handler = function(event, context) { var srcBucket = event.Records[0].s3.bucket.name; // Object key may have spaces or unicode non-ASCII characters. var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); /* { originalFilename: <string>, versions: [ { size: <number>, crop: [x,y], max: [x, y], rotate: <number> } ] }*/ var fileInfo; var dstBucket = "xmovo
  • 使用boto python从s3递归下载文件。(Downloading the files from s3 recursively using boto python.)
    问题 我在s3中有一个存储桶,它具有深层的目录结构。 我希望我可以一次全部下载它们。 我的文件如下所示: foo/bar/1. . foo/bar/100 . . 有什么方法可以使用python中的boto lib从s3存储桶中递归下载这些文件? 提前致谢。 回答1 您可以像这样(未试用)在存储桶中下载所有文件: from boto.s3.connection import S3Connection conn = S3Connection('your-access-key','your-secret-key') bucket = conn.get_bucket('bucket') for key in bucket.list(): try: res = key.get_contents_to_filename(key.name) except: logging.info(key.name+":"+"FAILED") 请记住,S3中的文件夹只是写密钥名的另一种方式,只有客户端会将其显示为文件夹。 回答2 #!/usr/bin/env python import boto import sys, os from boto.s3.key import Key from boto.exception import S3ResponseError DOWNLOAD_LOCATION_PATH
  • 是否可以批量上传到Amazon s3?(Is it possible to perform a batch upload to amazon s3?)
    问题 亚马逊s3是否支持批量上传? 我有一份工作,每晚需要上传〜100K的文件,这些文件最大可以达到1G,但偏向于较小的文件(90%的文件长度小于100字节,而99%的文件长度小于1000字节)。 s3 API是否支持在单个HTTP调用中上传多个对象? 所有对象必须在S3中作为单个对象可用。 我无法在其他任何地方(FTP等)或其他格式(数据库,EC2本地驱动器等)托管它们。 这是我无法改变的外部要求。 回答1 s3 API是否支持在单个HTTP调用中上传多个对象? 不,S3 PUT操作仅支持每个HTTP请求上载一个对象。 您可以在要与远程存储桶同步的计算机上安装S3 Tools,然后运行以下命令: s3cmd sync localdirectory s3://bucket/ 然后,您可以将此命令放置在脚本中,并创建计划的作业以在每个晚上运行此命令。 这应该做您想要的。 该工具根据MD5哈希和文件大小执行文件同步,因此冲突很少见(如果您确实希望可以使用“ s3cmd put”命令来强制覆盖目标存储桶中的对象)。 编辑:还请确保您阅读了我链接到S3 Tools的网站上的文档-是否需要将本地删除的文件从存储桶中删除还是忽略等需要不同的标志。 回答2 或者,您可以使用sync命令通过AWS CLI工具上载S3。 aws s3同步local_folder s3:// bucket-name
  • 默认情况下如何使AWS S3存储桶中的所有对象公开?(How to make all Objects in AWS S3 bucket public by default?)
    问题 我正在使用PHP库将文件上传到存储桶。 我已将ACL设置为public-read-write ,并且工作正常,但文件仍然是私有的。 我发现,如果将“受赠方”更改为“所有人”,则会使文件公开。 我想知道的是如何将存储桶中所有对象的默认Grantee设置为“ Everyone” 。 还是有另一种默认情况下使文件公开的解决方案? 我正在使用的代码如下: public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) { if ($input === false) return false; $rest = new S3Request('PUT', $bucket, $uri); if (is_string($input)) $input = array( 'data' => $input, 'size' => strlen($input), 'md5sum' => base64_encode(md5($input, true)) ); // Data if (isset($input['fp'])) $rest->fp =& $input['fp']; elseif (isset(
  • 如何在Amazon S3中重命名文件和文件夹?(How to rename files and folder in Amazon S3?)
    问题 在Amazon S3中,有什么功能可以重命名文件和文件夹吗? 任何相关的建议也欢迎。 回答1 在S3中,没有直接的方法来重命名文件。 您需要做的是使用一个新名称复制现有文件(只需设置目标密钥)并删除旧文件。 回答2 我刚刚测试了它,它的工作原理是: aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to> 回答3 aws s3 cp s3://source_folder/ s3://destination_folder/ --recursive aws s3 rm s3://source_folder --recursive 回答4 您可以使用AWS CLI命令对文件进行mv 回答5 您可以使用AWS CLI或s3cmd命令重命名AWS S3存储桶中的文件和文件夹。 使用S3cmd,使用以下语法重命名文件夹, s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name> 使用AWS CLI,使用以下语法重命名文件夹, aws s3 --recursive mv s3://<s3_bucketname>/<old
  • 如何在S3中公开10,000个文件(How to make 10,000 files in S3 public)
    问题 我在一个装有10,000个文件的存储桶中有一个文件夹。 似乎没有办法将其上传并立即将其公开。 所以我将它们全部上传了,它们是私人的,我需要将它们全部公开。 我尝试过aws控制台,它只是给出了一个错误(适用于文件较少的文件夹)。 我已经尝试过在Firefox中使用S3整理功能。 是否可以运行某些软件或脚本来公开所有这些信息? 回答1 您可以生成一个存储桶策略(请参见下面的示例),该策略提供对存储桶中所有文件的访问权限。 可以通过AWS控制台将存储桶策略添加到存储桶。 { "Id": "...", "Statement": [ { "Sid": "...", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::bucket/*", "Principal": { "AWS": [ "*" ] } } ] } 另请参阅以下由Amazon提供的策略生成器工具。 http://awspolicygen.s3.amazonaws.com/policygen.html 回答2 如果是第一次上传,则可以在命令行上将文件设置为在上传时公开: aws s3 sync . s3://my-bucket/path --acl public-read 如在AWS命令行界面中使用高级s3命令中所述 不幸的是