using Aliyun.OSS; using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Tools.AliYun { public class OSS { private string accessKeyId; private string accessKeySecret; private string bucket; private string endpoint; private string host; /// /// 初始化OSS对象 /// /// key : CRGk7TsNG9qlOt0f /// keysecret : wTXHa3xHApjEcz1uKCwnEPCgZUiCXf /// 接入点 : oss-cn-hangzhou.aliyuncs.com /// 存储名称 : jc-file public OSS(string accessKeyId, string accessKeySecret, string endpoint, string bucket) { this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.bucket = bucket; this.host = "https://" + bucket + "." + endpoint; this.endpoint = "https://" + endpoint; } /// /// 将Unix时间戳转换为DateTime类型时间 /// /// double 型数字 /// DateTime public static System.DateTime ConvertIntDateTime(double d) { System.DateTime time = System.DateTime.MinValue; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); time = startTime.AddMilliseconds(d); return time; } /// /// 将c# DateTime时间格式转换为Unix时间戳格式 /// /// 时间 /// long public static long ConvertDateTimeInt(System.DateTime time) { //double intResult = 0; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)); //intResult = (time- startTime).TotalMilliseconds; long t = (time.Ticks - startTime.Ticks) / 10000; //除10000调整为13位 return t; } public static string ToBase64hmac(string strText, string strKey) { HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.UTF8.GetBytes(strKey)); byte[] byteText = myHMACSHA1.ComputeHash(Encoding.UTF8.GetBytes(strText)); return System.Convert.ToBase64String(byteText); } /// /// 获取上传验证配置 /// /// 目录: 12/userpic/ /// 过期时间(分钟) /// public UploadCode GetUploadCode(string dir, string fileName, int expireTime) { /// /// 由用户指定的OSS访问地址、阿里云颁发的AccessKeyId/AccessKeySecret构造一个新的OssClient实例。 /// /// OSS的访问地址。 /// OSS的访问ID。 /// OSS的访问密钥。 var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret); long expireEndTime = ConvertDateTimeInt(DateTime.Now.AddMinutes(expireTime)); DateTime expiration = ConvertIntDateTime(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.AddConditionItem(PolicyConditions.CondContentLengthRange, 0, 1048576000); policyConds.AddConditionItem(MatchMode.StartWith, PolicyConditions.CondKey, dir + fileName + "."); String postPolicy = ossClient.GeneratePostPolicy(expiration, policyConds); byte[] binaryData = Encoding.UTF8.GetBytes(postPolicy); String encodedPolicy = Convert.ToBase64String(binaryData); String postSignature = ToBase64hmac(encodedPolicy, accessKeySecret); UploadCode s = new UploadCode(); s.accessid = accessKeyId; s.host = host; s.policy = encodedPolicy; s.signature = postSignature; s.expire = expireEndTime.ToString(); s.dir = dir; s.filename = fileName; return s; } /// /// 上传文件 /// /// 本地文件 /// 上传后文件 /// public bool UploadFile(string localFile, string ossFile) { if (System.IO.File.Exists(localFile)) { var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret); var result = ossClient.PutObject(bucket, ossFile, localFile); System.IO.File.Delete(localFile); return true; } else { return false; } } /// /// 上传文件 /// /// 上传后文件名 /// 文件流 /// 是否成功 public bool UploadFile(string OssFileName, Stream FileStream) { if (FileStream == null) { return false; } var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret); var result = ossClient.PutObject(bucket, OssFileName, FileStream); return true; } } public class UploadCode { public string accessid { get; set; } public string host { get; set; } public string policy { get; set; } public string signature { get; set; } public string expire { get; set; } public string dir { get; set; } public string filename { get; set; } } }