sample/PresignPutObject/Program.cs (54 lines of code) (raw):

using System.Globalization; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using CommandLine; using OSS = AlibabaCloud.OSS.V2; namespace Sample.PresignPutObject { public class Program { public class Options { [Option("region", Required = true, HelpText = "The region in which the bucket is located.")] public string? Region { get; set; } [Option("endpoint", Required = false, HelpText = "The domain names that other services can use to access OSS.")] public string? Endpoint { get; set; } [Option("bucket", Required = true, HelpText = "The `name` of the bucket.")] public string? Bucket { get; set; } [Option("key", Required = true, HelpText = "The `name` of the object.")] public string? Key { get; set; } } public static async Task Main(string[] args) { var parserResult = Parser.Default.ParseArguments<Options>(args); if (parserResult.Errors.Any()) { Environment.Exit(1); } var option = parserResult.Value; // Specify the region and other parameters. var region = option.Region; var bucket = option.Bucket; var endpoint = option.Endpoint; var key = option.Key; // Using the SDK's default configuration // loading credentials values from the environment variables var cfg = OSS.Configuration.LoadDefault(); cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider(); cfg.Region = region; if (endpoint != null) { cfg.Endpoint = endpoint; } using var client = new OSS.Client(cfg); var result = client.Presign(new OSS.Models.PutObjectRequest() { Bucket = bucket, Key = key, }); const string content = "hi oss!"; using var hc = new HttpClient(); var httpResult = await hc.PutAsync(result.Url, new ByteArrayContent(Encoding.UTF8.GetBytes(content))); Console.WriteLine("PutObject done"); Console.WriteLine($"StatusCode: {httpResult.StatusCode}"); /* //with props result = client.Presign( new PutObjectRequest() { Bucket = bucket, Key = key, StorageClass = "IA", Acl = "private", ContentType = "text/txt", Metadata = new Dictionary<string, string>() { { "key1", "value1" }, { "key2", "value2" } }, Tagging = "tag-key1=val1", } ); var content1 = "hello world"; var requestMessage = new HttpRequestMessage(HttpMethod.Put, new Uri(result.Url)); requestMessage.Content = new ByteArrayContent(Encoding.UTF8.GetBytes(content1)); foreach (var item in result.SignedHeaders!) { switch (item.Key.ToLower()) { case "content-disposition": requestMessage.Content.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse(item.Value); break; case "content-encoding": requestMessage.Content.Headers.ContentEncoding.Add(item.Value); break; case "content-language": requestMessage.Content.Headers.ContentLanguage.Add(item.Value); break; case "content-type": requestMessage.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(item.Value); break; case "content-md5": requestMessage.Content.Headers.ContentMD5 = Convert.FromBase64String(item.Value); break; case "content-length": requestMessage.Content.Headers.ContentLength = Convert.ToInt64(item.Value); break; case "expires": if (DateTime.TryParse( item.Value, CultureInfo.InvariantCulture, DateTimeStyles.None, out var expires )) requestMessage.Content.Headers.Expires = expires; break; default: requestMessage.Headers.Add(item.Key, item.Value); break; } } httpResult = await hc.SendAsync(requestMessage); */ } } }