private static async Task <HttpResponseMessage> ResizeSingle(HttpRequestMessage request, InputImageParameters inputParameters, IReadOnlyCollection <ImageSizeParam> imageSizes, ILogger log) { OutputImageParameters result; using (await _imageResizeService.CaptureAsync()) { try { using (MemoryStream imageStreamCopy = new MemoryStream()) { Stream imageStream = await request.Content.ReadAsStreamAsync(); await imageStream.CopyToAsync(imageStreamCopy); if (imageStreamCopy.Length == 0) { return(request.CreateResponse(HttpStatusCode.BadRequest, new { Body = new { Image = "Required" } })); } imageStreamCopy.Position = 0; inputParameters.InputStream = imageStreamCopy; result = _imageResizeService.Resize(inputParameters, imageSizes.Single()); } if (result == null) { return(request.CreateResponse(HttpStatusCode.BadRequest, new { Body = new { Image = "Something wrong with incoming image" } })); } } catch (ArgumentException ex) { object validationData = ex.Data["ValidationData"]; if (validationData != null) { return(request.CreateResponse(HttpStatusCode.BadRequest, validationData)); } throw; } } HttpResponseMessage response = request.CreateResponse(); if (result.Resized) { response.Headers.Add("X-Width", result.Width.ToString()); response.Headers.Add("X-Height", result.Height.ToString()); response.Headers.Add("X-Size", result.Size.ToString()); response.Content = new StreamContent(result.OutputStream) { Headers = { ContentType = new MediaTypeHeaderValue(inputParameters.OutputContentType) } }; response.StatusCode = HttpStatusCode.OK; } else { response.StatusCode = HttpStatusCode.NoContent; } return(response); }
private static async Task <HttpResponseMessage> ResizeMultiple(HttpRequestMessage request, InputImageParameters inputParameters, IReadOnlyCollection <ImageSizeParam> imageSizes, ILogger log) { List <ImageResizeResultModel> resizeResults = new List <ImageResizeResultModel>(); List <Task> uploadTasks = new List <Task>(); using (await _imageResizeService.CaptureAsync()) { try { using (MemoryStream imageStreamCopy = new MemoryStream()) { Stream imageStream = await request.Content.ReadAsStreamAsync(); await imageStream.CopyToAsync(imageStreamCopy); if (imageStreamCopy.Length == 0) { return(request.CreateResponse(HttpStatusCode.BadRequest, new { Body = new { Image = "Required" } })); } imageStreamCopy.Position = 0; inputParameters.InputStream = imageStreamCopy; foreach (OutputImageParameters image in _imageResizeService.ResizeMultiple(inputParameters, imageSizes)) { resizeResults.Add(new ImageResizeResultModel(image.Width, image.Height, image.Size, image.Quality)); uploadTasks.Add(_imageUploadService.UploadImage(inputParameters.UploadUrl, inputParameters.OutputContentType, image)); } } } catch (ArgumentException ex) { object validationData = ex.Data["ValidationData"]; if (validationData != null) { return(request.CreateResponse(HttpStatusCode.BadRequest, validationData)); } throw; } } try { await Task.WhenAll(uploadTasks); } catch (HttpRequestException ex) { log.LogError(ex, "Upload requests failed"); request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex); } HttpResponseMessage response = request.CreateResponse( HttpStatusCode.OK, resizeResults, JsonMediaTypeFormatter.DefaultMediaType ); return(response); }