public static void GetObjectBySignedUrlWithWebRequest(string bucketName, string key) { try { var metadata = client.GetObjectMetadata(bucketName, key); var etag = metadata.ETag; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get); req.AddQueryParam("param1", "value1"); req.ContentType = "text/html"; req.ContentMd5 = etag; req.AddUserMetadata("mk1", "mv1"); req.ResponseHeaders.CacheControl = "No-Cache"; req.ResponseHeaders.ContentEncoding = "utf-8"; req.ResponseHeaders.ContentType = "text/html"; // Generates url signature for accessing specified object. var uri = client.GeneratePresignedUri(req); var webRequest = (HttpWebRequest)WebRequest.Create(uri); webRequest.ContentType = "text/html"; webRequest.Headers.Add(HttpRequestHeader.ContentMd5, etag); webRequest.Headers.Add("x-oss-meta-mk1", "mv1"); var resp = webRequest.GetResponse() as HttpWebResponse; var output = resp.GetResponseStream(); var bufferSize = 2048; var bytes = new byte[bufferSize]; try { using (StreamWriter outfile = new StreamWriter(fileToSave)) { var length = 0; do { length = output.Read(bytes, 0, bufferSize); outfile.Write(bytes); } while (length > 0); } output.Close(); Console.WriteLine("Get object by signatrue succeeded."); } catch (Exception ex) { Console.WriteLine("ex : " + ex.Message); } } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public void GeneratePresignedUriCallbackTest() { string callbackHeaderBuilder = new CallbackHeaderBuilder(_callbackUrl, _callbackBody).Build(); string CallbackVariableHeaderBuilder = new CallbackVariableHeaderBuilder(). AddCallbackVariable("x:var1", "x:value1").AddCallbackVariable("x:var2", "x:value2").Build(); var gpuRequest = new GeneratePresignedUriRequest(_bucketName, _objectKey, SignHttpMethod.Put) { ContentType = "text/rtf", Expiration = DateTime.Now.AddHours(1), Callback = callbackHeaderBuilder, CallbackVar = CallbackVariableHeaderBuilder }; gpuRequest.UserMetadata.Add("Author", "Mingdi"); var uri = _ossClient.GeneratePresignedUri(gpuRequest); var metadata = new ObjectMetadata(); metadata.ContentType = "text/rtf"; metadata.UserMetadata.Add("Author", "Mingdi"); metadata.AddHeader(HttpHeaders.Callback, callbackHeaderBuilder); metadata.AddHeader(HttpHeaders.CallbackVar, CallbackVariableHeaderBuilder); var putObjectResult = _ossClient.PutObject(uri, Config.UploadTestFile, metadata); Assert.IsTrue(putObjectResult.IsSetResponseStream()); Assert.AreEqual(_callbackOkResponse, GetCallbackResponse(putObjectResult)); Assert.AreEqual(putObjectResult.HttpStatusCode, HttpStatusCode.OK); Assert.AreEqual(putObjectResult.ContentLength, _callbackOkResponse.Length); Assert.AreEqual(putObjectResult.RequestId.Length, "58DB0ACB686D42D5B4163D75".Length); Assert.AreEqual(putObjectResult.ResponseMetadata[HttpHeaders.ContentType], "application/json"); Assert.AreEqual(putObjectResult.ResponseMetadata[HttpHeaders.ETag], putObjectResult.ETag); Assert.AreEqual(putObjectResult.ResponseMetadata[HttpHeaders.ContentMd5].Length, "7GoU4OYaYroKXsbsG1f/lw==".Length); Assert.IsTrue(putObjectResult.ResponseMetadata[HttpHeaders.HashCrc64Ecma].Length > 0); Assert.IsTrue(putObjectResult.ResponseMetadata[HttpHeaders.ServerElapsedTime].Length > 0); Assert.AreEqual(putObjectResult.ResponseMetadata[HttpHeaders.Date].Length, "Wed, 29 Mar 2017 01:15:58 GMT".Length); _ossClient.DeleteObject(_bucketName, _objectKey); }
public string GetUrlCustom(IStorageInfo storageInfo, MediaElementUrlType urlType, string filePath, string fileName, string customStyleProcessStr) { if (string.IsNullOrEmpty(filePath)) { filePath = DEFAULT_CONTAINER; } filePath = filePath.Trim('/'); fileName = fileName.Trim('/'); if (urlType == MediaElementUrlType.PublishOutputUrl || urlType == MediaElementUrlType.PublishDownloadUrl) { var downloadHost = storageInfo.StorageHost.Trim('/'); if (!string.IsNullOrEmpty(customStyleProcessStr)) { customStyleProcessStr = "?x-oss-process=" + customStyleProcessStr; } return($"{downloadHost}/{filePath}/{fileName}{customStyleProcessStr}"); } else { string bucketName, objectName; OssClient client; GetClient(storageInfo.StorageId, storageInfo.StorageAccessKey, storageInfo.NetType, filePath, fileName, out bucketName, out objectName, out client); //string objectKey = //($"{filePath}/{fileName}"); // ($"{filePath}/{fileName}?{customStyleProcessStr}"); //.Trim(new char[] { '/' }); GeneratePresignedUriRequest request = new GeneratePresignedUriRequest(bucketName, objectName); request.Process = customStyleProcessStr; request.Expiration = DateTime.Now.AddHours(1); request.Method = SignHttpMethod.Get; var presignedUri = client.GeneratePresignedUri(request); return(presignedUri.AbsoluteUri); } }
public static void getObjectBySignedUrl2() { const string accessKeyId = "<your access key id>"; const string accessKeySecret = "<your access key secret>"; const string endpoint = "<valid host name>"; const string bucketName = "<bucket name>"; const string key = "<object name>"; OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var metadata = client.GetObjectMetadata(bucketName, key); var etag = metadata.ETag; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get); // Generates url signature for accessing specified object. var uri = client.GeneratePresignedUri(req); Console.WriteLine(uri.ToString()); OssObject ossObject = client.GetObject(uri); var file = File.Open("<file to hold object content>", FileMode.OpenOrCreate); Stream stream = ossObject.Content; byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); file.Write(bytes, 0, bytes.Length); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public string GetImageUrl(string key, ImageSize imgSize) { if (!string.IsNullOrEmpty(key) && (key.StartsWith("http:") || key.StartsWith("https:"))) { return(key); // 不是存储在阿里的Oss上的图片 } try { var now = DateTime.Now; var expire = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).AddYears(1); var bucket = GetBucketName(AttachmentType.Picture); switch (imgSize) { case ImageSize.Small: { var request = new GeneratePresignedUriRequest(bucket, key); request.Expiration = expire; request.Process = "image/resize,p_60"; return(client.GeneratePresignedUri(request)?.AbsoluteUri); } case ImageSize.Mid: { var request = new GeneratePresignedUriRequest(bucket, key); request.Expiration = expire; request.Process = "image/resize,p_50"; return(client.GeneratePresignedUri(request)?.AbsoluteUri); } default: return(client.GeneratePresignedUri(bucket, key, expire)?.AbsoluteUri); } } catch { return(string.Empty); } }
public void AliGeneratePresignedUriTest() { string ossEndpoint = NTKeyword.CloudFileDomain; string ossAccessKeyId = "ATAI4G7BGjsCjRF2ThyDdgBo"; // 假的 string ossAccessKeySecret = "A1VdRfHJ6k8NeklCtHjQlt7MYlRShE"; // 假的 var ossClient = new OssClient(ossEndpoint, ossAccessKeyId, ossAccessKeySecret); var req = new GeneratePresignedUriRequest("ntminer", "helloworld.exe", SignHttpMethod.Get) { Expiration = DateTime.Now.AddMinutes(10) }; var uri = ossClient.GeneratePresignedUri(req); Console.WriteLine(uri.ToString()); req = new GeneratePresignedUriRequest("ntminer", "helloworld.exe", SignHttpMethod.Get); uri = ossClient.GeneratePresignedUri(req); Console.WriteLine(uri.ToString()); TimeSpan ts = req.Expiration - DateTime.Now; Console.WriteLine(ts.TotalSeconds); // 默认是15分钟 Assert.IsTrue(ts.TotalSeconds > 14 * 60 && ts.TotalSeconds < 16 * 60); }
public string GetBlobSasUrl(string containerName, string blobName, DateTimeOffset expiry, bool isDownload = false, string filename = null, string contentType = null, BlobUrlAccess access = BlobUrlAccess.Read) { var req = new GeneratePresignedUriRequest(containerName, blobName) { Expiration = expiry.DateTime }; switch (access) { case BlobUrlAccess.None: case BlobUrlAccess.Read: req.Method = SignHttpMethod.Get; break; case BlobUrlAccess.Write: req.Method = SignHttpMethod.Put; break; case BlobUrlAccess.Delete: throw new NotSupportedException("BlobUrlAccess.Delete"); case BlobUrlAccess.All: throw new NotSupportedException("BlobUrlAccess.All"); } if (!string.IsNullOrWhiteSpace(contentType)) { req.ContentType = contentType; } if (!string.IsNullOrWhiteSpace(filename)) { req.ResponseHeaders.ContentDisposition = "inline;filename=" + filename; } var uri = _ossClient.GeneratePresignedUri(req); return(uri.ToString()); }
public static void GetObjectBySignedUrlWithClient(string bucketName, string key) { try { var metadata = client.GetObjectMetadata(bucketName, key); var etag = metadata.ETag; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get); // Generates url signature for accessing specified object. var uri = client.GeneratePresignedUri(req); OssObject ossObject = client.GetObject(uri); using (var file = File.Open("fileToSave", FileMode.OpenOrCreate)) { using (Stream stream = ossObject.Content) { int length = 4 * 1024; var buf = new byte[length]; do { length = stream.Read(buf, 0, length); file.Write(buf, 0, length); } while (length != 0); } } Console.WriteLine("Get object by signatrue succeeded."); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static string GetIamgeUri(string key, float width = 100, float height = 100) { try { var accessKeyId = "LTAI4FfhUHPcQ1VHcKN5wEHc"; var accessKeySecret = "F2zwYrZ4xKUwayfhXWXmthzLKiMXnp "; var endpoint = @"oss-cn-zhangjiakou.aliyuncs.com"; var bucketName = "chakk"; var client = new OssClient(endpoint, accessKeyId, accessKeySecret); var process = $"image/resize,m_fixed,w_{width},h_{height}"; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get) { Expiration = DateTime.Now.AddHours(64), Process = process }; var uri = client.GeneratePresignedUri(req); return(uri.ToString()); } catch (Exception) { return(""); } }
public Uri GetAssignedUri(string key) { Uri uri = null; if (!string.IsNullOrEmpty(key)) { var client = new OssClient(this.config.OssEndPoint, this.config.AccessKeyId, this.config.AccessKeySecret); try { var generatePresignedUriRequest = new GeneratePresignedUriRequest(this.config.Bucket, key, SignHttpMethod.Get) { Expiration = DateTime.Now.AddMinutes(this.config.Expiration), }; uri = client.GeneratePresignedUri(generatePresignedUriRequest); } catch (Exception ex) { Console.Write(ex.ToString()); throw new InternalException(ex.Message); } } return(uri); }
public void GeneratePresignedUriStsTokenTest() { var targetObject = OssTestUtils.GetObjectKey(_className); try { var client = new OssClient(Config.Endpoint, new Common.Authentication.DefaultCredentialsProvider( new Common.Authentication.DefaultCredentials(Config.AccessKeyId, Config.AccessKeySecret, "test-token"))); var gpuRequest = new GeneratePresignedUriRequest(_bucketName, targetObject, SignHttpMethod.Get) { ContentType = "text/rtf", Expiration = DateTime.Now.AddHours(1), }; var uri = client.GeneratePresignedUri(gpuRequest); Assert.AreNotEqual(uri.ToString().IndexOf("security-token=test-token"), -1); } catch { Assert.IsTrue(false); } var request = new GeneratePresignedUriRequest(_bucketName, targetObject, SignHttpMethod.Get) { ContentType = "text/rtf", Expiration = DateTime.Now.AddHours(1), }; request.BucketName = null; _ossClient.GeneratePresignedUri(request); request.BucketName = _bucketName; request.Key = targetObject; _ossClient.GeneratePresignedUri(request); }
/// <summary> /// 获取图片的url,临时访问,1小时后过期 /// </summary> /// <param name="orginFileName">原始文件名</param> /// <returns></returns> public static string GetTemporaryUrl(string orginFileName) { _logger.Info(orginFileName + ": 开始获取..."); try { var result = GetImagsList(orginFileName); if (result.Count > 0) { // 找到需要的数据,结束查找 var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, result[0], SignHttpMethod.Get) { Expiration = DateTime.Now.AddHours(1), }; var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest); return(signedUrl.ToString()); } return(null); } catch (Exception ex) { _logger.Error(ex, ex.Message ?? "下载文件失败"); return(null); } }
public void GeneratePresignedUriWithExecptionTest() { try { var targetObject = OssTestUtils.GetObjectKey(_className); var gpuRequest = new GeneratePresignedUriRequest(_bucketName, targetObject, SignHttpMethod.Head) { ContentType = "text/rtf", Expiration = DateTime.Now.AddHours(1), }; gpuRequest.UserMetadata.Add("Author", "oss"); gpuRequest.UserMetadata.Add("Test", "test"); gpuRequest.AddQueryParam("x-param-null", ""); gpuRequest.AddQueryParam("x-param-space0", " "); gpuRequest.AddQueryParam("x-param-value", "value"); gpuRequest.AddQueryParam("x-param-space1", " "); var uri = _ossClient.GeneratePresignedUri(gpuRequest); Assert.IsTrue(false); } catch { Assert.IsTrue(true); } }
public static void getObjectBySignedUrl() { const string accessKeyId = "<your access key id>"; const string accessKeySecret = "<your access key secret>"; const string endpoint = "<valid host name>"; const string bucketName = "<bucket name>"; const string key = "<object name>"; OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var metadata = client.GetObjectMetadata(bucketName, key); var etag = metadata.ETag; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get); // Set optional properties(be blind to them usually) req.AddQueryParam("param1", "value1"); req.ContentType = "text/html"; req.ContentMd5 = etag; req.AddUserMetadata("mk1", "mv1"); req.AddUserMetadata("mk2", "mv2"); req.ResponseHeaders.CacheControl = "No-Cache"; req.ResponseHeaders.ContentEncoding = "utf-8"; req.ResponseHeaders.ContentType = "text/html"; // Generates url signature for accessing specified object. var uri = client.GeneratePresignedUri(req); Console.WriteLine(uri.ToString()); var webRequest = (HttpWebRequest)WebRequest.Create(uri); webRequest.ContentType = "text/html"; webRequest.Headers.Add(HttpRequestHeader.ContentMd5, etag); webRequest.Headers.Add("x-oss-meta-mk1", "mv1"); webRequest.Headers.Add("x-oss-meta-mk2", "mv2"); var resp = webRequest.GetResponse() as HttpWebResponse; var output = resp.GetResponseStream(); var bufferSize = 2048; var bytes = new byte[bufferSize]; try { var length = 0; do { length = output.Read(bytes, 0, bufferSize); // to do something with bytes... } while (length > 0); output.Close(); } catch (Exception ex) { Console.WriteLine("ex : " + ex.Message); } } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static void PutStreamBySignedUrl(string bucketName, string key) { OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { // Step1: Genereates url signature var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put); var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest); // Step2: Prepares for stream to be uploaded and sends out this request. var buffer = Encoding.UTF8.GetBytes("Aliyun OSS SDK for C#"); using (var ms = new MemoryStream(buffer)) { client.PutObject(signedUrl, ms); } Console.WriteLine("Get object by signatrue succeeded."); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static void GenerateIamgeUri(string bucketName) { try { var process = "image/resize,m_fixed,w_100,h_100"; var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get) { Expiration = DateTime.Now.AddHours(1), Process = process }; // 产生带有签名的URI var uri = client.GeneratePresignedUri(req); Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static void putObjectBySignedUrl() { const string accessKeyId = "<your access key id>"; const string accessKeySecret = "<your access key secret>"; const string endpoint = "<valid host name>"; const string bucketName = "<bucket name>"; const string key = "<object name>"; //const string postData = "<your data to upload>"; const string fileToUpload = "<file to upload>"; OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { // Puts object by using URL Signature Style(two steps included). // Step1: Genereates url signature var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put); var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest); // Step2: Prepares for stream to be uploaded and sends out this request. //var buffer = Encoding.UTF8.GetBytes(postData); //PutObjectResult result = null; //using (var ms = new MemoryStream(buffer)) //{ // result = client.PutObject(signedUrl, ms); //} // Step2: Prepares for filepath to be uploaded and sends out this request. var result = client.PutObject(signedUrl, fileToUpload); Console.WriteLine("Uploaded File's ETag: {0}", result.ETag); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static void PutLocalFileBySignedUrl(string bucketName, string key) { OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { // Step1: Genereates url signature var request = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put); request.Expiration = DateTime.Now.AddMinutes(5); var signedUrl = client.GeneratePresignedUri(request); // Step2: Prepares for filepath to be uploaded and sends out this request. client.PutObject(signedUrl, fileToUpload); Console.WriteLine("Put object by signatrue succeeded."); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
private async Task <string> PresignedObjectAsync(string bucketName, string objectName, int expiresInt, PresignedObjectType type) { if (string.IsNullOrEmpty(bucketName)) { throw new ArgumentNullException(nameof(bucketName)); } if (string.IsNullOrEmpty(objectName)) { throw new ArgumentNullException(nameof(objectName)); } if (expiresInt <= 0) { throw new Exception("ExpiresIn time can not less than 0."); } if (expiresInt > 7 * 24 * 3600) { throw new Exception("ExpiresIn time no more than 7 days."); } long nowTime = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; const int minExpiresInt = 600; string key = Encrypt.MD5($"{bucketName}_{objectName}_{type.ToString().ToUpper()}"); string objectUrl = null; //查找缓存 if (Options.IsEnableCache && (expiresInt > minExpiresInt)) { var cacheResult = await _cache.GetAsync <PresignedUrlCache>(key); PresignedUrlCache cache = cacheResult.HasValue ? cacheResult.Value : null; //缓存中存在,且有效时间不低于10分钟 if (cache != null && cache.Type == type && cache.CreateTime > 0 && (cache.CreateTime + expiresInt - nowTime) > minExpiresInt && cache.Name == objectName && cache.BucketName == bucketName) { return(cache.Url); } } if (type == PresignedObjectType.Get) { //生成URL AccessMode accessMode = await this.GetObjectAclAsync(bucketName, objectName); if (accessMode == AccessMode.PublicRead || accessMode == AccessMode.PublicReadWrite) { string bucketUrl = await this.GetBucketEndpointAsync(bucketName); objectUrl = $"{bucketUrl}{(objectName.StartsWith("/") ? "" : "/")}{objectName}"; } else { var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get) { Expiration = DateTime.Now.AddSeconds(expiresInt) }; var uri = _client.GeneratePresignedUri(req); if (uri != null) { objectUrl = uri.ToString(); } } } else { var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put) { Expiration = DateTime.Now.AddSeconds(expiresInt) }; var uri = _client.GeneratePresignedUri(req); if (uri != null) { objectUrl = uri.ToString(); } } if (string.IsNullOrEmpty(objectUrl)) { throw new Exception("Presigned get object url failed."); } //save cache if (Options.IsEnableCache && expiresInt > minExpiresInt) { PresignedUrlCache urlCache = new PresignedUrlCache() { Url = objectUrl, CreateTime = nowTime, Name = objectName, BucketName = bucketName, Type = type }; int randomSec = new Random().Next(5, 30); await _cache.SetAsync(key, urlCache, TimeSpan.FromSeconds(expiresInt + randomSec)); } return(objectUrl); }