Beispiel #1
0
        public async Task <IActionResult> Upload(UploadFileViewModel info)
        {
            // Read file from vgy
            var file = info.File;

            using (var stream = file.OpenReadStream())
                using (var memoryStream = new MemoryStream())
                {
                    await stream.CopyToAsync(memoryStream);

                    var bytes       = memoryStream.ToArray();
                    var vgyResponse =
                        await _vgyService.UploadAsync <VgySuccessResponse>(bytes, file.ContentType, file.FileName, CancellationToken.None);

                    if (vgyResponse == null)
                    {
                        return(StatusCode(StatusCodes.Status403Forbidden,
                                          new ApiErrorResponse("Unable to upload invalid file.")));
                    }

                    return(Ok(vgyResponse));
                }

            #endregion
        }
Beispiel #2
0
        /// <summary>
        ///     <inheritdoc />
        /// </summary>
        /// <param name="id"></param>
        /// <param name="photo"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public virtual async Task <User> UploadUserProfileImageAsync(int id, SKBitmap photo,
                                                                     CancellationToken cancellationToken = default(CancellationToken))
        {
            // Find user.
            var user = await _unitOfWork.Accounts.FirstOrDefaultAsync(
                x => x.Id == id && x.Status == UserStatus.Available, cancellationToken);

            if (user == null)
            {
                throw new ApiException(HttpMessages.AccountIsNotFound, HttpStatusCode.NotFound);
            }

            // Resize image to 512x512 size.
            var resizedSkBitmap = photo.Resize(new SKImageInfo(512, 512), SKBitmapResizeMethod.Lanczos3);

            // Initialize file name.
            var fileName = $"{Guid.NewGuid():D}.png";

            using (var skImage = SKImage.FromBitmap(resizedSkBitmap))
                using (var skData = skImage.Encode(SKEncodedImageFormat.Png, 100))
                    using (var memoryStream = new MemoryStream())
                    {
                        skData.SaveTo(memoryStream);
                        var vgySuccessRespone = await _vgyService.UploadAsync <VgySuccessResponse>(memoryStream.ToArray(),
                                                                                                   "image/png", fileName,
                                                                                                   CancellationToken.None);

                        // Response is empty.
                        if (vgySuccessRespone == null || vgySuccessRespone.IsError)
                        {
                            throw new ApiException(HttpMessages.ImageIsInvalid, HttpStatusCode.Forbidden);
                        }

                        user.Photo = vgySuccessRespone.ImageUrl;
                    }

            // Save changes into database.
            await _unitOfWork.CommitAsync(cancellationToken);

            return(user);
        }