Ikhtisar
OSS SDK menyediakan fungsi terintegrasi untuk tanda tangan, unggah, dan unduh. Namun, dalam praktiknya, Anda mungkin perlu menggunakan API untuk mengunggah dan mengunduh objek dengan mempertimbangkan tanda tangan. Topik ini menggunakan API PutObject sebagai contoh untuk menjelaskan cara mengunggah dan mengunduh objek dalam C#.
Catatan: Kami menyarankan Anda menggunakan OSS SDK. Topik ini memberikan contoh penggunaan tanda tangan untuk mengunggah objek. Anda dapat memodifikasi kode sesuai kebutuhan bisnis Anda.
Detail
Berikut adalah contoh kode penggunaan API PutObject dalam C#:
Catatan: Contoh berikut diimplementasikan menggunakan Visual Studio 2017 dan .NET Framework 4.0.
using System;
using System.Security.Cryptography;
using System.Text;
using System.Net;
using System.IO;
using System.Reflection;
namespace Aliyun.OSS.Samples
{
class Program
{
//Your AccessKey
public static string AccessKey = "xx";
//Your AccessKeySecret
public static string AccessKeySecret = "xx";
//bucket endpoint
public static string Endpoint = "oss-cn-hangzhou.aliyuncs.com";
public static string BucketName = "xx";
public static string objectName = "mytest/1.txt";
public static string HmacSha1Sign(string secret, string strOrgData)
{
var hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(secret));
var dataBuffer = Encoding.UTF8.GetBytes(strOrgData);
var hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
}
public static string HttpRequest(string url, string data, string sign, string contentType, string time1)
{
byte[] datas = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "PUT";
request.Timeout = 150000;
request.Headers.Add("Authorization", "OSS " + AccessKey + ":" + sign);
CallPrivateMethod(request, "SetSpecialHeaders", "Date", time1);
request.ContentType = contentType;
Stream requestStream = null;
string responseStr = null;
try
{
if (datas != null)
{
request.ContentLength = datas.Length;
requestStream = request.GetRequestStream();
requestStream.Write(datas, 0, datas.Length);
requestStream.Close();
}
else
{
request.ContentLength = 0;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
responseStr = response.Headers.GetValues("x-oss-request-id")[0];
//responseStr = sr.ReadToEnd();
}
catch (Exception)
{
Console.WriteLine("error");
}
finally
{
request = null;
requestStream = null;
}
return responseStr;
}
public static string ToGMTString()
{
return DateTime.Now.ToUniversalTime().ToString("r");
}
public static void CallPrivateMethod(object instance, string name, params object[] param)
{
BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
Type type = instance.GetType();
MethodInfo method = type.GetMethod(name, flag);
method.Invoke(instance, param);
}
static void Main(string[] args)
{
string varb = "PUT";
string content_type = "application/json";
string timeGmt = ToGMTString();
string str = varb + "\n\n" + content_type + "\n" + timeGmt + "\n/" + BucketName + "/" + objectName;
string signature = HmacSha1Sign(AccessKeySecret, str);
string url = "http://" + BucketName + "." + Endpoint + "/" + objectName;
string data = "{ \"key\":\"this is a oss's test\"}";
string result = HttpRequest(url, data, signature, content_type, timeGmt);
Console.WriteLine("requestId: " + result);
}
}
}Dokumentasi
Untuk informasi lebih lanjut tentang cara menggunakan OSS SDK, lihat OSS menambahkan tanda tangan ke header.
Ruang Lingkup
OSS