Exemple #1
0
        /// <summary>
        /// Generates the URIs that a client can use to upload images to the storage system
        /// </summary>
        /// <param name="entrantId">The entrant that is being uploaded</param>
        /// <param name="generateDisplayUri">Controls the generation of the displayUploadUri</param>
        /// <param name="verifyContainerName">The name of the blob container for verification images. Default: 'photos-verification'</param>
        /// <param name="displayContainerName">The name of the blob container for verification images. Default: 'photos-display'</param>
        /// <returns></returns>
        public async Task <(Uri verifyUploadUri, Uri?displayUploadUri)> GenerateImageUploadUris(string entrantId,
                                                                                                bool generateDisplayUri, string verifyContainerName = "photos-verification",
                                                                                                string displayContainerName = "photos-display")
        {
            if (string.IsNullOrWhiteSpace(entrantId))
            {
                throw new ArgumentNullException(nameof(entrantId));
            }

            //Generate containers
            var blobClient = new BlobContainerClient(_storageAccount.ToString(true), displayContainerName);
            await blobClient.CreateIfNotExistsAsync(PublicAccessType.Blob).ConfigureAwait(false);

            blobClient = new BlobContainerClient(_storageAccount.ToString(true), verifyContainerName);
            await blobClient.CreateIfNotExistsAsync(PublicAccessType.None).ConfigureAwait(false);

            var sasBuilder = new BlobSasBuilder
            {
                BlobContainerName = verifyContainerName,
                BlobName          = entrantId,
                Resource          = @"b",
                ExpiresOn         = DateTimeOffset.UtcNow.AddMinutes(5)
            };

            //Sets the permissions for the SAS token
            sasBuilder.SetPermissions(BlobSasPermissions.Create | BlobSasPermissions.Write | BlobSasPermissions.Delete);

            var credentials = new StorageSharedKeyCredential(_storageAccount.Credentials.AccountName,
                                                             _storageAccount.Credentials.ExportBase64EncodedKey());

            //The constructed sas token
            var verifyUploadSas = sasBuilder.ToSasQueryParameters(credentials);

            //Uri builder for verify blob
            var builder = new BlobUriBuilder(_storageAccount.BlobEndpoint)
            {
                BlobName          = entrantId,
                BlobContainerName = verifyContainerName,
                AccountName       = _storageAccount.Credentials.AccountName,
                Sas = verifyUploadSas
            };
            var verifyUploadUri = builder.ToUri();

            sasBuilder.BlobContainerName = displayContainerName;
            builder.BlobContainerName    = displayContainerName;

            if (generateDisplayUri)
            {
                builder.Sas = sasBuilder.ToSasQueryParameters(credentials);
                var displayUploadUri = builder.ToUri();
                return(verifyUploadUri, displayUploadUri);
            }
            return(verifyUploadUri, null);
        }
        public async Task <IActionResult> Create([Bind("Id,FirstName,LastName,Image")] InstructorVM instructor)
        {
            CloudStorageAccount account       = CloudStorageAccount.Parse(storageConnection.ToString());
            CloudBlobClient     serviceClient = account.CreateCloudBlobClient();

            // Create container. Name must be lower case.
            Console.WriteLine("Creating container...");
            var container = serviceClient.GetContainerReference("instructor-images");

            container.CreateIfNotExistsAsync().Wait();

            // write a blob to the container
            CloudBlockBlob blob = container.GetBlockBlobReference("helloworld.txt");

            using (var memoryStream = new MemoryStream())
            {
                await instructor.Image.CopyToAsync(memoryStream);

                await blob.UploadFromStreamAsync(memoryStream);



                if (ModelState.IsValid)
                {
                    await _instructorsService.AddInstructorAsync(new InstructorRequest
                    {
                        FirstName = instructor.FirstName,
                        LastName  = instructor.LastName
                    });

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(instructor));
        }