Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }