C# 直接使用HTTP访问阿里云OSS

81fcb42a853ed3acd5c373fb9569bc9c.png

前言

7264b631911690268c642f18ebbf7349.png

525ec5650659fc24cb13fe60116879cb.png

    相信大家在使用阿里云OSS进行文件上传到时候,基本都是直接采用了阿里云提供的SDK;嗯,确实是简单方便,而且提供了各种语言、各种版本。但是偶尔会涉及到一些小众语言或者不方便集成SDK的项目,所以就需要直接采用Http进行上传。以下示例采用C#语言实现,若有其他语言参考即可:

2950db58c423631751ac99f3078d2b6d.png

b3426410e60531cf8b3e3fed4a5e2c58.gif

2e9e394d67986202cff3787fb9e97940.jpeg

开发环境:.NET Framework版本:4.8

开发工具:Visual Studio 2022

65ab4eb425d69c243c109c0c79e6fb8b.png

实现步骤

59bb7140269dc5387b4a8ab2d8773552.png

  1. 定义OSS的基础信息

readonly string endpoint = "";
  readonly string accessKeyId = "";
  readonly string accessKeySecret = "";
  readonly string bucketName = "";
  1. 参数加密算法

private string HmacSha1(string data)  {      var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(accessKeySecret));      var dataBuffer = Encoding.UTF8.GetBytes(data);      var hashBytes = hmacsha1.ComputeHash(dataBuffer);      return Convert.ToBase64String(hashBytes);  }
  1. 对数据进行签名

private string Sign(string uploadName){    string data = $"PUT\n\ntext/plain\n{DateTime.Now.ToUniversalTime().ToString("r")}/{bucketName}/{uploadName}";    return HmacSha1(data);}
  1. 上传调用

public async Task<string> Upload()
        {
            string uploadName = "test/123.txt";
            string uploadPath = "d:\\123.txt";


            string sign = Sign(uploadName);
            string authorization = "OSS " + accessKeyId + ":" + sign;
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", authorization);
            byte[] bytes = System.IO.File.ReadAllBytes(uploadPath);
            HttpContent content = new ByteArrayContent(bytes);
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain");
            var res = client.PutAsync(bucketEndpoint + uploadName, content).Result;
            string result = await res.Content.ReadAsStringAsync();
            return result;
        }
  1. 若以上基础信息放在前端怕被暴露,可考虑将签名封装为接口供前端调用或者做中转调用(浪费资源)。 

5c1f98462b5d613aee97e2054d8080fc.png

实现效果

86bf5a7d985e1d0509c9b71b939c9d83.png

☛☛☛点击此处下载源码☚☚☚

3736c4cfaf4b135b315008cda987aa06.gif

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值