You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中引用指定AWS S3 Bucket并列出其内容及指定文件

解决方案

一、列出指定Bucket中的JPG文件

替换你的button1_Click方法,使用ListObjectsV2Async获取Bucket内的对象,并筛选出JPG格式文件。如果Bucket内文件较多,需处理分页返回的情况:

private async void button1_Click(object sender, EventArgs e)
{
    // 初始化S3客户端
    using var client = new AmazonS3Client();
    string targetBucket = "testbucktest";
    var request = new ListObjectsV2Request
    {
        BucketName = targetBucket,
        // 可选:若JPG文件集中在特定前缀下,可设置Prefix缩小范围
        // Prefix = "images/",
        MaxKeys = 1000 // 单次请求返回的最大文件数,可按需调整
    };

    try
    {
        ListObjectsV2Response response;
        do
        {
            response = await client.ListObjectsV2Async(request);
            // 筛选出JPG/JPEG格式文件,不区分大小写
            var jpgFiles = response.S3Objects.Where(obj => 
                obj.Key.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || 
                obj.Key.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase));
            
            foreach (var file in jpgFiles)
            {
                textBox1.Text += $"文件名:{file.Key},大小:{file.Size}字节\r\n";
            }

            // 设置下一页续传标记,继续获取剩余文件
            request.ContinuationToken = response.NextContinuationToken;
        } while (response.IsTruncated); // 还有未返回文件时循环请求
    }
    catch (AmazonS3Exception ex)
    {
        textBox1.Text += $"错误信息:{ex.Message}\r\n";
    }
}

关键说明

  • ListObjectsV2Async是AWS推荐的列表对象方法,比旧版ListObjectsAsync更高效,支持分页
  • 通过Where语句筛选文件后缀,适配大小写不同的JPG格式
  • 分页处理:当IsTruncated为true时,说明还有文件未返回,需用NextContinuationToken发起下一次请求

二、根据文件名获取特定文件

若需直接获取Bucket中的某个特定文件,使用GetObjectAsync方法,传入Bucket名称和文件的完整Key(即文件名,若文件在子目录下需包含路径,比如photos/summer.jpg):

private async void GetSpecificFile_Click(object sender, EventArgs e)
{
    using var client = new AmazonS3Client();
    string targetBucket = "testbucktest";
    string targetFileKey = "example.jpg"; // 替换为你要获取的文件名

    try
    {
        var request = new GetObjectRequest
        {
            BucketName = targetBucket,
            Key = targetFileKey
        };

        using var response = await client.GetObjectAsync(request);
        textBox1.Text += $"获取文件成功:{response.Key}\r\n";
        textBox1.Text += $"文件类型:{response.Headers.ContentType}\r\n";

        // 示例:将文件保存到本地
        // response.WriteResponseStreamToFile(@"C:\temp\example.jpg");
    }
    catch (AmazonS3Exception ex)
    {
        textBox1.Text += $"获取文件失败:{ex.Message}\r\n";
    }
}

注意事项

  • 确保AWS凭证配置正确(可通过Visual Studio AWS工具、环境变量或配置文件设置),否则会触发权限错误
  • 捕获AmazonS3Exception处理常见异常:比如Bucket不存在、文件不存在、权限不足等场景

内容的提问来源于stack exchange,提问作者Trevor K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:20:31