|
2 | 2 | using System.Collections.Generic; |
3 | 3 | using System.IO; |
4 | 4 | using System.Linq; |
| 5 | +using System.Net; |
5 | 6 | using System.Threading.Tasks; |
6 | 7 | using Cuiliang.AliyunOssSdk.Api; |
7 | 8 | using Cuiliang.AliyunOssSdk.Api.Bucket.List; |
|
16 | 17 | using Cuiliang.AliyunOssSdk.Entites; |
17 | 18 | using Cuiliang.AliyunOssSdk.Request; |
18 | 19 | using Cuiliang.AliyunOssSdk.Utility; |
| 20 | +using Cuiliang.AliyunOssSdk.Utility.Authentication; |
19 | 21 |
|
20 | 22 | namespace Cuiliang.AliyunOssSdk |
21 | 23 | { |
@@ -104,6 +106,28 @@ public async Task<OssResult<PutObjectResult>> PutObjectByFileNameAsync(BucketInf |
104 | 106 | } |
105 | 107 | } |
106 | 108 |
|
| 109 | + /// <summary> |
| 110 | + /// 上传流 |
| 111 | + /// </summary> |
| 112 | + /// <param name="bucket"></param> |
| 113 | + /// <param name="key"></param> |
| 114 | + /// <param name="content">内容流</param> |
| 115 | + /// <param name="mimeType"></param> |
| 116 | + /// <returns></returns> |
| 117 | + public async Task<OssResult<PutObjectResult>> PutObjectAsync(BucketInfo bucket, string key, Stream content, |
| 118 | + string mimeType = "application/octet-stream") |
| 119 | + { |
| 120 | + var file = new RequestContent() |
| 121 | + { |
| 122 | + ContentType = RequestContentType.String, |
| 123 | + StreamContent = content, |
| 124 | + MimeType = mimeType |
| 125 | + }; |
| 126 | + |
| 127 | + return await PutObjectAsync(bucket, key, file); |
| 128 | + } |
| 129 | + |
| 130 | + |
107 | 131 | /// <summary> |
108 | 132 | /// 复制对象 |
109 | 133 | /// </summary> |
@@ -205,5 +229,44 @@ public async Task<OssResult<GetObjectMetaResult>> GetObjectMetaAsync(BucketInfo |
205 | 229 | var cmd = new GetObjectMetaCommand(_requestContext, bucket, key); |
206 | 230 | return await cmd.ExecuteAsync(); |
207 | 231 | } |
| 232 | + |
| 233 | + /// <summary> |
| 234 | + /// 获取文件的下载链接 |
| 235 | + /// </summary> |
| 236 | + /// <param name="storeKey"></param> |
| 237 | + /// <param name="expireSeconds"></param> |
| 238 | + /// <returns></returns> |
| 239 | + public string GetFileDownloadLink(BucketInfo bucket, string storeKey, int expireSeconds) |
| 240 | + { |
| 241 | + long seconds = (DateTime.UtcNow.Ticks - 621355968000000000) / 10000000; |
| 242 | + |
| 243 | + string toSign = String.Format("GET\n\n\n{0}\n/{1}/{2}", seconds, bucket, storeKey); |
| 244 | + |
| 245 | + string sign = ServiceSignature.Create().ComputeSignature( |
| 246 | + _requestContext.OssCredential.AccessKeyId, toSign); |
| 247 | + |
| 248 | + string url = String.Format("{0}{1}/{2}?OSSAccessKeyId={3}&Expires={4}&Signature={5}", |
| 249 | + bucket.EndpointUri, |
| 250 | + bucket, |
| 251 | + storeKey, |
| 252 | + _requestContext.OssCredential.AccessKeyId, |
| 253 | + seconds, |
| 254 | + WebUtility.UrlEncode(sign)); |
| 255 | + |
| 256 | + return url; |
| 257 | + } |
| 258 | + |
| 259 | + /// <summary> |
| 260 | + /// 生成直接post到oss的签名 |
| 261 | + /// </summary> |
| 262 | + /// <param name="policy"></param> |
| 263 | + /// <returns></returns> |
| 264 | + public string ComputePostSignature(string policy) |
| 265 | + { |
| 266 | + string sign = ServiceSignature.Create().ComputeSignature( |
| 267 | + _requestContext.OssCredential.AccessKeyId, policy); |
| 268 | + |
| 269 | + return sign; |
| 270 | + } |
208 | 271 | } |
209 | 272 | } |
0 commit comments