public async Task <ServiceModels.ServiceResponse> Create(InputModels.CreateSmileyInput input) { var serviceResponse = new ServiceModels.ServiceResponse(); var allowedExtensions = new[] { "gif", "png" }; var extension = Path.GetExtension(input.File.FileName).ToLower().Substring(1); if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]")) { serviceResponse.Error("File", "Your filename contains invalid characters."); } if (!allowedExtensions.Contains(extension)) { serviceResponse.Error("File", $"Your file must be: {string.Join(", ", allowedExtensions)}."); } if (DbContext.Smileys.Any(s => s.Code == input.Code)) { serviceResponse.Error(nameof(input.Code), "Another smiley exists with that code."); } if (!serviceResponse.Success) { return(serviceResponse); } var smileyRecord = new DataModels.Smiley { Code = input.Code, Thought = input.Thought, FileName = input.File.FileName }; DbContext.Smileys.Add(smileyRecord); using (var inputStream = input.File.OpenReadStream()) { smileyRecord.Path = await ImageStore.Save(new ImageStoreSaveOptions { ContainerName = Constants.InternalKeys.SmileyContainer, FileName = input.File.FileName, ContentType = input.File.ContentType, InputStream = inputStream, Overwrite = true }); } DbContext.SaveChanges(); serviceResponse.Message = $"Smiley '{smileyRecord.FileName}' was added with code '{smileyRecord.Code}'."; return(serviceResponse); }
public async Task <ServiceModels.ServiceResponse> Create(InputModels.CreateSmileyInput input) { var serviceResponse = new ServiceModels.ServiceResponse(); var allowedExtensions = new[] { ".gif" }; var extension = Path.GetExtension(input.File.FileName); if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]")) { serviceResponse.Error("File", "Your filename contains invalid characters."); } if (!allowedExtensions.Contains(extension)) { serviceResponse.Error("File", "Your file must be a gif."); } if (DbContext.Smileys.Any(s => s.Code == input.Code)) { serviceResponse.Error(nameof(input.Code), "Another smiley exists with that code."); } if (!serviceResponse.Success) { return(serviceResponse); } var smileyRecord = new DataModels.Smiley { Code = input.Code, Thought = input.Thought, FileName = input.File.FileName }; DbContext.Smileys.Add(smileyRecord); var container = CloudBlobClient.GetContainerReference("smileys"); if (await container.CreateIfNotExistsAsync()) { await container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); } var blobReference = container.GetBlockBlobReference(input.File.FileName); // Multiple smileys can point to the same image. if (!await blobReference.ExistsAsync()) { blobReference.Properties.ContentType = "image/gif"; using (var fileStream = input.File.OpenReadStream()) { fileStream.Position = 0; await blobReference.UploadFromStreamAsync(fileStream); } } smileyRecord.Path = blobReference.Uri.AbsoluteUri; DbContext.SaveChanges(); serviceResponse.Message = $"Smiley '{smileyRecord.FileName}' was added with code '{smileyRecord.Code}'."; return(serviceResponse); }