S3 上传文档。

本文档提供了一个基础教程,演示如何使用S3SDK上传文件到亚马逊的私有云或第三方S3协议环境。关键步骤包括设置Endpoint、AccessKey和AccessKeyId,以及配置ForcePathStyle。在保存文件时,会进行MD5校验以确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

亚马逊的私有云和自己搭的第三方S3协议使用 S3 sdk 上传文件 --闲来无聊记录下避免下次还得翻官方文档。复杂的应用看自己移步 api 官方文档 这里只是让你跑起来的基础教程

Endpoint == url

AccessKeySecret == 密钥

AccessKeyId == 用户

BucketName== 桶名称

private IAmazonS3 CreateClient()
        {
            IAmazonS3 client;
            try
            {
                if (string.IsNullOrEmpty(S3Setting.Endpoint)
                    || string.IsNullOrEmpty(S3Setting.AccessKeyId)
                    || string.IsNullOrEmpty(S3Setting.AccessKeySecret))
                {
                    throw new ArgumentNullException("S3Setting Endpoint、AccessKeyId、AccessKeyId为空");
                }

                AmazonS3Config config = new AmazonS3Config();
                config.ServiceURL = S3Setting.Endpoint; // 私有环境。公网环境可以参考亚马逊官方
                config.ForcePathStyle = true;  //特别注意 要用寻址模式
                LogManager.IntegrationLogger.Info($"config: 初始化成功");
                client = new AmazonS3Client(S3Setting.AccessKeyId, S3Setting.AccessKeySecret, config);
            }
            catch (Exception ex)
            {
                LogManager.IntegrationLogger.Info($"创建IAmazonS3客户端异常:{ex} 配置信息:{S3Setting}");
                throw ex;
            }
            return client;
        }

  public override void Save(string filePath, Stream inputStream)
        {
            if (string.IsNullOrEmpty(filePath) || inputStream == null || inputStream.Length == 0)
            {
                throw new ArgumentNullException("参数:filePath、inputStream为空");
            }
            var md5Hash = "";

            using (Stream stream = new MemoryStream())  
            {
                inputStream.CopyTo(stream);
                inputStream.Position = 0;
                stream.Position = 0;

                using (var crypto = MD5.Create())
                {
                    md5Hash = Convert.ToBase64String(crypto.ComputeHash(stream));
                }
                stream.Position = 0;
                var request = new PutObjectRequest
                {
                    BucketName = BucketName,
                    InputStream = stream,
                    Key = filePath,
                    ContentType = MimeMapping.GetMimeMapping(Path.GetFileName(filePath)),
                    MD5Digest = md5Hash, /// 这个值必须传不然服务端会校验数据一致性 导致获取的hash 和默认的hash 做比较 不一致报错
                };
                using (var s3client = CreateClient())
                {
                    var response = s3client.PutObject(request);
                    if (response.HttpStatusCode != System.Net.HttpStatusCode.OK)
                    {
                        throw new Exception($"save emcs3 storage object failed. file:{filePath}, status:{response.HttpStatusCode}");
                    }
                    LogManager.IntegrationLogger.Info($"Save 文件 成功 : {request.Key}");
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值