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