public async Task<ActionResult> EditImage(int id) { var file = await _fileService.GetFileByIdAsync(id); var data = await FileHelpers.ReadAllBytesAsync(file.FilePath); var fileDecrypted = await FileHelpers.DecryptAsync(data, "zxcvbgfdsaqwert54321"); var base64 = Convert.ToBase64String(fileDecrypted); var dataUrl = FileHelpers.ToDataUrl(base64, file.FileType); var model = new ImageEditorViewModel(file, dataUrl); return View("ImageEditor", model); }
public async Task<ActionResult> SaveEditedImage(ImageEditorViewModel imageEditorViewModel) { var userId = AbpSession.GetUserId(); // continue on with whatever we need to do until we get this file and are ready to do something with it var fileTask = _fileService.GetFileByIdAsync(imageEditorViewModel.FileId); // make a regular expression to get the type and image data quickly var imageRegex = Regex.Match(imageEditorViewModel.DataUrl, @"data:image/(?<type>.+?),(?<data>.+)"); var imageType = imageRegex.Groups["type"].Value.Split(';')[0]; var base64Data = imageRegex.Groups["data"].Value; var binaryData = Convert.FromBase64String(base64Data); var size = binaryData.Length; string path; // we have done all the work we can do without requiring the file, no await till that task is done var file = await fileTask; // saving as a new file if (imageEditorViewModel.FileId == 0) { imageEditorViewModel.FileName += "." + imageType; path = FileHelpers.GetPath(imageEditorViewModel.FileName, Server.MapPath(@"\App_Data\"), userId); } else { path = file.FilePath; } await FileHelpers.EncryptFileToDiskAsync(binaryData, path, "zxcvbgfdsaqwert54321"); // go ahead and return if we are not making a new file if (file.Id != 0) return Json(new {fileName = file.FileName}); var newFile = new File { FileName = imageEditorViewModel.FileName, FilePath = path, FileSize = FileHelpers.BytesToMegaBytes(size), UploadDateTime = DateTime.Now, FileType = "image/" + imageType, IsImage = true, UserId = userId }; await _fileService.SaveFileAsync(newFile); return Json(new {fileName = imageEditorViewModel.FileName}); }