C# 调用腾讯云 OBJECT API 向对象存储上传文件
一个C#开发的项目需要把文件上传到腾讯云的存储,以为是一个小CASE,用他的SDK呗,查了半天腾讯云对象存储的SDK,提供了C,C++,JAVA,Android,PHP,PYTHON几乎有所主流语言的SDK,就是没有C#的,咨询官方确认没有提供,不知道是不是语言歧视,看来只有看看他的API能不能搞;
看了下PUT Object API,官方描述:“PUT Object 接口请求可以将本地的对象(Object)上传至指定存储桶中”。貌似这个能上传,但官方只有参数说明,没有示例,看来只有自已摸索,最麻烦的是上传需要签名,需要自已写一个生成签名的服务,生成签名的服务流程如下:
还有,另一个同事把签名的服务搞了,但还有个麻烦事,官方提供的请求参数中签名的“Authorization”是不带认证类型,如下:
在C#中用HttpClient工具类不能直接通过Headers.Add的方式加Authorization键值对,必须指定认证类型,但指定认证类型后,调用不成功,只有换一个工具类HttpWebRequest,可以把Authorization调Headers.Add(header.Key, header.Value)添加;终于折腾成功~
我只需要请求获取,最终上传部分代码如下:
public string UploadFile(byte[] filestream, SignatureOutput signature)
{
var url =
$"https://{signature.bucket}.cos.{signature.region}.myqcloud.com{signature.path}";
var headers =
new Dictionary<string, string> {{"Authorization", signature.signature}, {"ETag", signature.md5}};
var result = WebApiFactory.CosApiProxy.Put(url, "", headers, filestream);
if (result)
{
return url;
}
else
{
return ”";
}
}
public bool Put(string url, string param, Dictionary<string, string> headers, byte[] filestream, string contentType = "application/octet-stream")
{
var client = (HttpWebRequest)WebRequest.Create(url);
foreach (var header in headers)
{
client.Headers.Add(header.Key, header.Value);
}
client.Method = "PUT";
client.ContentType = contentType;
client.ContentLength = filestream.Length;
client.GetRequestStream().Write(filestream, 0, filestream.Length);
var response = (HttpWebResponse)client.GetResponse();
return response.StatusCode == HttpStatusCode.OK;
}
下一篇: NFC卡分类