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 }
/// <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); }