public async Task <IActionResult> CreateSecretAsync([FromBody] Client.SecretCreationInfo creationInfo, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (creationInfo == null) { var error = ErrorResponsesService.BodyIsMissing(nameof(creationInfo)); return(BadRequest(error)); } const string blackTemplateWithColoredPoints = "1001582"; var pointsUrl = await PhotolabService.PostMultipartFormData(creationInfo.ImageUrl, blackTemplateWithColoredPoints); var webClient = new WebClient(); var imageBytes = await webClient.DownloadDataTaskAsync(pointsUrl); Stream stream = new MemoryStream(imageBytes); var description = PhysiognomyService.GetDescription(new Bitmap(stream)); const string photoTemplateWithColoredPoints = "1001581"; var url = await PhotolabService.PostMultipartFormData(creationInfo.ImageUrl, photoTemplateWithColoredPoints); var modelCreationInfo = new Model.SecretCreationInfo(url, description); var modelSecret = await repository.CreateAsync(modelCreationInfo, cancellationToken).ConfigureAwait(false); var clientSecret = Converter.SecretConverter.Convert(modelSecret); return(CreatedAtRoute("GetSecretRoute", new { id = clientSecret.Id }, clientSecret)); }
public async Task <IActionResult> UploadImageAsync(IFormFile imageFile, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (imageFile == null) { var error = ErrorResponsesService.BodyIsMissing(nameof(imageFile)); return(BadRequest(error)); } var imageId = Guid.NewGuid(); var imageName = imageId.ToString(); var extension = Path.GetExtension(imageFile.FileName); var path = $"{ImageDirectory}{imageName}{extension}"; var stream = imageFile.OpenReadStream(); ClientModels.Secrets.Secret clientSecret; if (ImageValidationService.IsValidLength(imageFile.Length) && ImageValidationService.IsImage(stream)) { var webDirectoryPath = $"{hostingEnvironment.WebRootPath}{ImageDirectory}"; if (!Directory.Exists(webDirectoryPath)) { Directory.CreateDirectory(webDirectoryPath); } using (var fileStream = new FileStream($"{hostingEnvironment.WebRootPath}{path}", FileMode.Create)) { await imageFile.CopyToAsync(fileStream, cancellationToken).ConfigureAwait(false); var creationInfo = new SecretCreationInfo(path, string.Empty); var modelSecret = await repository.CreateAsync(creationInfo, cancellationToken).ConfigureAwait(false); clientSecret = Converter.SecretConverter.Convert(modelSecret); } } else { var error = ErrorResponsesService.InvalidImageData(nameof(imageFile)); return(BadRequest(error)); } return(Ok(clientSecret)); }