标签: s3-bucket

如何使用Java计算S3存储桶中的对象总数?

我正在尝试找到一种更快的方法来使用 Amazon 的 AWS SDK 对 s3 存储桶中的所有对象进行计数。

private static int getBucketFileCount(AmazonS3 s3, ListObjectsV2Request req) {
   ListObjectsV2Result result;
   int fileCount = 0;
   log.info("Counting s3 files");

   do {
      result = s3.listObjectsV2(req);
      for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {
         fileCount++;
      }
      req.setContinuationToken(result.getNextContinuationToken());

   } while (result.isTruncated() == true);
       return fileCount;
}
Run Code Online (Sandbox Code Playgroud)

然而,这种方法非常慢,我还没有找到正确的方法。我找到了另一个有帮助的答案,但无法准确地弄清楚实现方式。 getObjectSummaries 能否获取存储在 S3 存储桶中的对象数量?

如何在当前的实现中使用getNextMarker()函数?我需要改变什么?

java amazon-s3 amazon-web-services aws-sdk s3-bucket

6
推荐指数
0
解决办法
8834
查看次数

outputLocation 不是有效的 S3 路径。雅典娜例外

我正在尝试使用 C# athena 驱动程序执行 athena 查询。

Amazon.Athena.Model.ResultConfiguration resultConfig = new Amazon.Athena.Model.ResultConfiguration();
resultConfig.OutputLocation = "https://s3.us-east-2.amazonaws.com/testbucket/one/2018-02-06/";
//other inputs i have tried
//"s3://testbucket/one/2018-02-06/"
//testbucket

//Populate the request object
                Amazon.Athena.Model.StartQueryExecutionRequest queryExec = new Amazon.Athena.Model.StartQueryExecutionRequest();
                queryExec.QueryString = query.QueryString;
                queryExec.QueryExecutionContext = queryExecutionContext;
                queryExec.ResultConfiguration = resultConfig;

StartQueryExecutionResponse athenaResponse = athenaClient.StartQueryExecution(queryExec);//throws exception
Run Code Online (Sandbox Code Playgroud)

不同情况的例外:

  1. outputLocation 不是有效的 S3 路径。提供https://s3.us-east-2.amazonaws.com/testbucket/one/2018-02-06/

  2. 无法验证/创建输出存储桶 testbucket。提供 s3://testbucket/one/2018-02-06/

  3. 无法验证/创建输出存储桶 testbucket。提供测试桶

有人可以帮我找到正确的 s3 格式吗?

提前致谢。

c# amazon-s3 amazon-web-services s3-bucket amazon-athena

5
推荐指数
1
解决办法
1万
查看次数

跨帐户上传时如何更改S3文件所有权

我有一个将一些文件上传(复制)到另一个AWS账户中的S3存储桶中的应用程序,我使用来自AWS开发工具包(Nodejs)的copyObject命令

var params = {
      Bucket: "MyBucket_AccountB", 
      CopySource: encodeURI('/Accunt_A_Bocket/file.png'),
      Key: "file.png",
      ACL: 'bucket-owner-full-control'
     };
s3.copyObject(params, function(err, datas) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(datas);           // successful response
});
Run Code Online (Sandbox Code Playgroud)

假设此代码是从另一个AWS帐户运行的,AWS_ACCOUNT_A则文件上传到中的S3存储桶AWS_ACCOUNT_B情况是,当文件上传到此存储桶时,该文件的所有权仍然是AWS_ACCOUNT_A

我想知道AWS_ACCOUNT_B在上传文件时该如何赋予文件所有权。这里有人可以给我一些指导吗?

更新:

我使用了这个政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Permissions",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::MY_ACCOUNT_B_ID:root"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A",
            "arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A/*"
        ]
    }
]
}
Run Code Online (Sandbox Code Playgroud)

但上传的文件仍归拥有Account_A,我在政策中做错了什么吗?

amazon-s3 amazon-web-services aws-sdk s3-bucket

5
推荐指数
1
解决办法
2110
查看次数

pyspark 列出 s3 存储桶中文件夹的子文件夹

我有一个s3存储桶,其中存储要由我的 pyspark 代码处理的数据文件。我要访问的文件夹是:

s3a://bucket_name/data/
Run Code Online (Sandbox Code Playgroud)

此文件夹包含文件夹。我的目标是访问此目录中最后添加的文件夹的内容。由于某些原因,我不想使用 boto。有什么方法可以访问文件夹列表,以便我可以选择我想访问的文件夹。如果我指定文件夹,我可以访问文件,但我想让它动态。

amazon-s3 dataframe pyspark s3-bucket

4
推荐指数
1
解决办法
4692
查看次数

从S3存储桶流式传输视频

我正在使用nodejs服务器进行视频流传输。我已将Amazon S3存储桶用作视频存储。当nodejs在Amazon EC2实例中运行时。为了响应客户端的请求流式传输特定的视频文件,需要先将文件从S3存储桶下载到EC2实例(nodejs服务器),这是一个耗时的过程,客户端必须在第一个视频文件之前等待几秒钟。视频段从nodejs发送到客户端。我正在寻找一种删除下载时间间隔的方法。我的问题是:

1#是否可以直接从S3存储桶流式传输?

要么

2#S3存储是否允许获取存储文件的小块而不是下载整个文件?

注意:iOS视频播放器应使用视频流。我是视频流和S3存储的新手。

请给我建议这种情况下最好的解决方案。

video-streaming node.js s3-bucket

3
推荐指数
1
解决办法
4150
查看次数

使用 boto3 列出 s3 中启用版本的存储桶

如何列出打开版本控制标志的所有 s3 存储桶名称?

我有 100 个 s3 存储桶。某些存储桶已打开版本控制标志。我想使用 boto3 列出所有这些存储桶名称。

我在下面给出了我的 python 代码片段。

import boto3
REGION = "us-east-1"

s3client = boto3.client('s3',region_name=REGION)
for bucket in s3client.list_buckets()['Buckets']:
  bucket = bucket['Name']
  response = s3client.get_bucket_versioning(Bucket=bucket)
  if 'Status' in response and response['Status'] == 'Enabled':
    print(bucket)
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 amazon-web-services boto3 s3-bucket

3
推荐指数
1
解决办法
2172
查看次数

如何使用 boto3 在不删除现有标签的情况下向 S3 存储桶添加标签?

我正在使用这个功能:

s3 = boto3.resource('s3')
bucket_tagging = s3.BucketTagging(bucket)
Set_Tag = bucket_tagging.put(Tagging={'TagSet':[{'Key':'Owner', 'Value': owner}]})
Run Code Online (Sandbox Code Playgroud)

它正在删除现有标签,我只能看到一个标签。

python amazon-s3 amazon-web-services boto3 s3-bucket

3
推荐指数
2
解决办法
7005
查看次数

如何使用 AWS CLI 根据给定日期范围(例如 8 月 8 日至 8 月 15 日)从 S3 存储桶下载选择性日期范围文件?

我可以过滤特定日期的数据,但不能过滤日期范围的数据。例如,使用 AWS CLI 从 2019 年 9 月 12 日到 2019 年 9 月 15 日

例如。要过滤 2019 年的数据,我使用 --recursive --exclude "*" --include " 2019 "

amazon-s3 amazon-web-services aws-cli s3-bucket

3
推荐指数
1
解决办法
5365
查看次数

S3存储桶版本可以存储的文件版本数量是否受到限制

我们在用例中使用版本s3存储桶。

我们将经常更新同一文件。

我想知道s3存储桶可以处理多少个相同文件版本。

我不知道如果存在限制,版本s3可以处理的最大文件数是否将删除最旧的版本。

amazon-s3 amazon-web-services s3-bucket

2
推荐指数
1
解决办法
758
查看次数