示例#1
0
        public async Task <ImageDto> AddImage(ImagePostRequest request)
        {
            await ValidateImage(request);

            var extension = GetExtension(request.File.FileName);

            var image = _mapper.Map <Image>(request);

            image.Id   = Guid.NewGuid().ToString();
            image.Name = $"{image.Id}{extension}";
            image.NameForCompressed = $"{image.Id}_compressed{extension}";

            var pathFull = Path.Combine(_fileOptions.DirectoryPath,
                                        image.UserId, image.Name);
            var pathCompressed = Path.Combine(_fileOptions.DirectoryPath,
                                              image.UserId, image.NameForCompressed);

            await _imageProvider.AddImage(request.File.OpenReadStream(),
                                          pathFull);

            _imageProvider.OptimizeImage(pathFull,
                                         pathCompressed, _fileOptions.MaxQuality);

            _unitOfWork.ImageRepository.Add(image);
            await _unitOfWork.Commit();

            return(_mapper.Map <ImageDto>(image));
        }
示例#2
0
        public async Task <IActionResult> PostImage([FromBody] ImagePostRequest request)
        {
            // upload image
            CloudBlockBlob  blockBlob = _container.GetBlockBlobReference($"{request.Id}.{request.EncodingFormat}");
            HttpWebRequest  aRequest  = (HttpWebRequest)WebRequest.Create(request.URL);
            HttpWebResponse aResponse = (await aRequest.GetResponseAsync()) as HttpWebResponse;
            var             stream    = aResponse.GetResponseStream();
            await blockBlob.UploadFromStreamAsync(stream);

            stream.Dispose();

            // save metadata
            var savedImage = new SavedImage {
                UserId      = request.Id,
                Description = request.Description,
                StorageUrl  = blockBlob.Uri.ToString(),
                Tags        = new List <SavedImageTag>(),
            };

            foreach (var tag in request.Tags)
            {
                savedImage.Tags.Add(new SavedImageTag {
                    Tag = tag
                });
            }

            _context.Add(savedImage);
            _context.SaveChanges();

            return(Ok());
        }
示例#3
0
        //[Route("Post")]
        //   [SwaggerOperation()]
        public async Task <IActionResult> Post([FromBody] ImagePostRequest request)
        {
            CloudBlockBlob blockBlob = _container.GetBlockBlobReference($"{request.id}.{request.encodingFormat}");

            HttpWebRequest  aRequest  = (HttpWebRequest)WebRequest.Create(request.url);
            HttpWebResponse aResponse = (await aRequest.GetResponseAsync()) as HttpWebResponse;
            var             stream    = aResponse.GetResponseStream();
            await blockBlob.UploadFromStreamAsync(stream);

            stream.Dispose();


            var savedImage = new SavedImage();

            savedImage.UserId      = request.userId;
            savedImage.Description = request.description;
            savedImage.StorageUrl  = blockBlob.Uri.ToString();
            savedImage.Tags        = new List <SavedImageTag>();

            foreach (var tag in request.tags)
            {
                savedImage.Tags.Add(new SavedImageTag()
                {
                    Tag = tag
                });
            }

            _context.Add(savedImage);
            _context.SaveChanges();
            return(Ok());
        }
示例#4
0
        public async Task <IActionResult> PostPostImage(int postId, [FromForm] ImagePostRequest imageRequest)
        {
            imageRequest.PostId = postId;
            var image = await _imageService.AddPostImage(imageRequest);

            return(CreatedAtRoute("GetPostImage", new { postId = postId, id = image.ImageId }, image));
        }
示例#5
0
        public async Task <IActionResult> AddImage([FromForm] ImagePostRequest request)
        {
            this.CheckUser(request.UserId);

            var image = await _imageService.AddImage(request);

            await AddInformationToImage(image);

            return(Created(Url.Link("GetImage", new { image.Id }), image));
        }
示例#6
0
        public async Task <IActionResult> PostImage([FromBody] ImagePostRequest request)
        {
            System.IO.Stream stream = null;
            IActionResult    result = Ok();

            try
            {
                _logger.Info($"Call PostImage with data: user: {request.UserId}, image: (Id: {request.Id}, description: {request.Description}, tags: {request.Tags}, url: {request.URL})");


                var blockBlob = _container.GetBlockBlobReference(string.Format("{0}.{1}", request.Id, request.EncodingFormat));
                var aRequest  = (HttpWebRequest)WebRequest.Create(request.URL);
                var aResponse = (await aRequest.GetResponseAsync()) as HttpWebResponse;

                stream = aResponse.GetResponseStream();
                await blockBlob.UploadFromStreamAsync(stream);

                var savedImage = new SavedImage
                {
                    UserId      = request.UserId,
                    Description = request.Description,
                    StorageUrl  = blockBlob.Uri.ToString(),
                    Tags        = new List <SavedImageTag>()
                };

                foreach (var tag in request.Tags)
                {
                    savedImage.Tags.Add(new SavedImageTag {
                        Tag = tag
                    });
                }

                _logger.Debug("PostImage, saving data in db");
                _context.Add(savedImage);

                _context.SaveChanges();

                _logger.Debug("PostImage, succes");
            }
            catch (Exception e)
            {
                _logger.Error(e, e.Message);
                result = BadRequest();
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                }
                stream.Close();
            }

            return(result);
        }
示例#7
0
        private async Task ValidateImage(ImagePostRequest request)
        {
            if (await _userManager.FindByIdAsync(request.UserId) == null)
            {
                throw new ObjectNotFoundException($"Entity with id {request.UserId} not found");
            }

            if (request.File.Length > _fileOptions.MaxSize)
            {
                throw new InvalidOperationException($"The file is too large. Max size is {_fileOptions.MaxSize} bytes");
            }
        }
示例#8
0
        public void PostImageTest()
        {
            AzureToolkitContext context = GetAzureToolkitContext();
            var controller = new ImagesController(context);

            var request = new ImagePostRequest()
            {
                URL            = new Uri("https://azuretkstorageoleier.blob.core.windows.net/savedimages/D30DFA0F40F3410C282A831D55AF58D9792C225F.jpeg"),
                EncodingFormat = "jpg",
                Id             = Guid.NewGuid().ToString()
            };
            Task <IActionResult> task = controller.PostImage(request);

            task.Wait();
        }
        public async Task <ImageResponse> AddPostImage(ImagePostRequest request)
        {
            var file         = request.File;
            var uploadResult = await UploadImage(file);

            request.ImageUrl  = uploadResult.Url.ToString();
            request.PublicId  = uploadResult.PublicId;
            request.TimeImage = DateTime.UtcNow;
            var image = _mapper.Map <PostImage>(request);

            _context.PostImages.Add(image);
            await _context.SaveChangesAsync();

            return(_mapper.Map <ImageResponse>(image));
        }