aws s3 对象存储 上传文件

最近在做国外业务 :用到亚马逊s3服务 。上传文件到对象存储。发现有意思的事情:而且决绝问题的文档少的可怜。所有这边记录下 方便大家填坑

  • 国内像阿里云这种,上传文件时候获取一次签名。然后就能继续使用签名上传任何文件。
  • aws s3 默认上传文件时提前获取文件名称和类型来获取上传 url(签名),并通过 put方式上传。就是说 上传文件的名称和类型 已经包含在签名中了 。这样以来前端就能不能说想传什么就传什么了。 安全吧 好像是更安全

但是我这边是im这就能点蛋疼了。后来经不断试过 发现s3 也是支持。获取一次签名之后 随便传文件的方式

1.获取s3 上传凭证:

后端采用开发c#,就随便写了个获取前面的 demo

复制代码
namespace aws_s3
{
    internal class S3PresignedPostExample
    {
        public async Task<CreatePresignedPostResponse> CreatePresignedPostWithConditions(
            IAmazonS3 s3Client,
            string bucketName)
        {
            var request = new CreatePresignedPostRequest
            {
                BucketName = bucketName,
                Key = "uploads/${filename}",  // 动态文件名
                Expires = DateTime.UtcNow.AddHours(2)
            };

            // 添加自定义字段
            request.Fields.Add("acl", "private");
            request.Conditions.Add(new StartsWithCondition("key", "uploads/"));
            request.Conditions.Add(new ContentLengthRangeCondition(1, 10485760));//10mb

            return await s3Client.CreatePresignedPostAsync(request);
        }

        // 使用示例
        public async Task Example()
        {
            string accessKey = "AKIA5SIW********";
            string secretKey = "fMxL4N235Uhrysmf****************";

            var config = new AmazonS3Config
            {
                RegionEndpoint = RegionEndpoint.APNortheast1 // 改成你的 bucket 所在 region
            };
            var s3Client = new AmazonS3Client(accessKey, secretKey, config);

            var response = await CreatePresignedPostWithConditions(
                s3Client,
                "catgamebucket"
            );

            Console.WriteLine($"URL: {response.Url}");
            Console.WriteLine("Fields:");
            foreach (var field in response.Fields)
            {
                Console.WriteLine($"  {field.Key}: {field.Value}");
            }
        }
    }
}

运行起来就是这个东西:

2.postman 上传文件

上面这样就是上传成功了,需要注意的是参数的顺序。一定要像上面这样。这样就能前端定义文件名称 实现随便上传了

相关推荐
酷可达拉斯1 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
爱说实话17 小时前
腾讯云Ubuntu远程无法ssh登录
云计算·ssh·腾讯云
腾讯蓝鲸智云1 天前
标杆客户实践提炼:CFlow 版本价值流模板实战指南
运维·服务器·自动化·云计算·devops
翼龙云_cloud1 天前
腾讯云国际站代理商: COS 对象存储 + CDN加速 从创建到加速完成
运维·服务器·云计算·腾讯云
腾讯云大数据1 天前
从多模态数据处理到模型训练:腾讯云EMR-Ray打通Data+AI全流程
人工智能·云计算·腾讯云·mapreduce·腾讯云大数据
Dawn-bit1 天前
Linux文本处理三剑客之sed详解
linux·运维·服务器·云计算·运维开发
AKAMAI2 天前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
酷可达拉斯2 天前
Linux操作系统-免密登录远程操作系统
linux·运维·服务器·网络·云计算
分布式存储与RustFS3 天前
对象存储正在吞掉数据湖:S3 Tables 把 Iceberg 收编成存储的原生能力
iceberg·对象存储·s3·分布式对象存储·rustfs·minio平替·s3 tables
Dawn-bit3 天前
Linux磁盘分区与Swap和磁盘故障查询
linux·运维·服务器·网络·云计算