示例#1
0
        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);
        }
示例#2
0
        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});
        }