Beispiel #1
0
        public async Task <string> UploadAsset(Stream assetDataStream, string contentType, string assetFileName)
        {
            string getUrl = "/organisations";
            OrganiationsSearchResult searchResult = await this.oneBlinkApiClient.GetRequest <OrganiationsSearchResult>(getUrl);

            if (searchResult.organisations.Count != 1)
            {
                throw new ArgumentException("You do not have access to any organisations");
            }
            string postUrl = "/asset-upload-credentials";
            AssetUploadCredentialsRequest assetUploadCredentialsRequest = new AssetUploadCredentialsRequest();

            assetUploadCredentialsRequest.assetPath      = "assets/" + Guid.NewGuid().ToString() + "_" + assetFileName;
            assetUploadCredentialsRequest.organisationId = searchResult.organisations[0].id;
            AssetUploadCredentialsResponse assetUploadCredentialsResponse = await this.oneBlinkApiClient.PostRequest <AssetUploadCredentialsRequest, AssetUploadCredentialsResponse>(postUrl, assetUploadCredentialsRequest);

            RegionEndpoint regionEndpoint = RegionEndpoint.GetBySystemName(assetUploadCredentialsResponse.s3.region);

            SessionAWSCredentials sessionAWSCredentials = new SessionAWSCredentials(
                assetUploadCredentialsResponse.credentials.AccessKeyId,
                assetUploadCredentialsResponse.credentials.SecretAccessKey,
                assetUploadCredentialsResponse.credentials.SessionToken
                );
            AmazonS3Client   amazonS3Client = new AmazonS3Client(sessionAWSCredentials, regionEndpoint);
            PutObjectRequest request        = new PutObjectRequest
            {
                BucketName  = assetUploadCredentialsResponse.s3.bucket,
                Key         = assetUploadCredentialsResponse.s3.key,
                InputStream = assetDataStream,
                ContentType = contentType,
                CannedACL   = S3CannedACL.PublicRead,
                ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256,
            };

            request.Headers.ExpiresUtc   = new DateTime().AddYears(1).ToUniversalTime(); // Max 1 year
            request.Headers.CacheControl = "max-age=31536000";                           // Max 1 year(365 days)

            await amazonS3Client.PutObjectAsync(request);

            return(string.Format("https://s3.{0}.amazonaws.com/{1}/{2}", assetUploadCredentialsResponse.s3.region, assetUploadCredentialsResponse.s3.bucket, assetUploadCredentialsResponse.s3.key));
        }
        public async Task <string> UploadAsset(Stream assetDataStream, string contentType, string assetFileName)
        {
            string getUrl = "/organisations";
            OrganiationsSearchResult searchResult = await this.oneBlinkApiClient.GetRequest <OrganiationsSearchResult>(getUrl);

            if (searchResult.organisations.Count != 1)
            {
                throw new ArgumentException("You do not have access to any organisations");
            }
            string postUrl = "/asset-upload-credentials";
            AssetUploadCredentialsRequest assetUploadCredentialsRequest = new AssetUploadCredentialsRequest();

            assetUploadCredentialsRequest.assetPath      = "assets/" + assetFileName;
            assetUploadCredentialsRequest.organisationId = searchResult.organisations[0].id;
            AssetUploadCredentialsResponse assetUploadCredentialsResponse = await this.oneBlinkApiClient.PostRequest <AssetUploadCredentialsRequest, AssetUploadCredentialsResponse>(postUrl, assetUploadCredentialsRequest);

            RegionEndpoint regionEndpoint = RegionEndpoint.GetBySystemName(assetUploadCredentialsResponse.s3.region);

            SessionAWSCredentials sessionAWSCredentials = new SessionAWSCredentials(
                assetUploadCredentialsResponse.credentials.AccessKeyId,
                assetUploadCredentialsResponse.credentials.SecretAccessKey,
                assetUploadCredentialsResponse.credentials.SessionToken
                );
            AmazonS3Client   amazonS3Client = new AmazonS3Client(sessionAWSCredentials, regionEndpoint);
            PutObjectRequest request        = new PutObjectRequest
            {
                BucketName  = assetUploadCredentialsResponse.s3.bucket,
                Key         = assetUploadCredentialsResponse.s3.key,
                InputStream = assetDataStream,
                ContentType = contentType,
                CannedACL   = S3CannedACL.PublicRead
            };

            await amazonS3Client.PutObjectAsync(request);

            return(string.Format("https://s3.{0}.amazonaws.com/{1}/{2}", assetUploadCredentialsResponse.s3.region, assetUploadCredentialsResponse.s3.bucket, assetUploadCredentialsResponse.s3.key));
        }