MVC рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗMCE рдореЗрдВ рд╕рд░рд▓ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдбрд░

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП "рдмрдиреНрдзрди" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрдореЗрдЬ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ рдЫреЛрдЯреЗ рд╕рдВрдкрд╛рджрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реЛред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреБрдк рд░рд╣рдирд╛ рдФрд░ рд╣рдореЗрд╢рд╛ рд╕рдм рдХреБрдЫ stackoverflow.com рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдирд╛ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЖрдЬ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереЗ:
рд▓рдЧрднрдЧ рд╕рднреА "рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП" рдЦреБрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд░реНрд╡рд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдПрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдПрдбрд┐рдЯрд░ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдПрдХ рдХрдЪрд░рд╛ рдбрдВрдк рдлрд╝рд╛рдЗрд▓ рдмрдирдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдордХрд╕рдж рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдирд┐рд░реНрдгрдп рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдФрд░ рдХрдард┐рди рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдЪрд╛рдВрджреА рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рджреВрд╕рд░реЛрдВ рдиреЗ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ред рд╕рднреА рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп MVC рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ SmallMCE рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓, рдЖрд╕рд╛рди рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдбрд░ рд▓рд┐рдЦрдирд╛ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдПрдорд╡реАрд╕реА рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдЧрд╛ рди рдХрд┐ ASP.NET)ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдмреВрдЯрд▓реЛрдбрд░ рдФрд░ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред



1. рдмреВрдЯрд▓реЛрдбрд░



рд▓реЛрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдФрд░ рджреЛ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкреИрдирд▓ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - "рдбрд╛рд▓реЗрдВ" рдФрд░ "рд░рджреНрдж рдХрд░реЗрдВ"ред рд╣рдо jquery.form рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреВрдЯрд▓реЛрдбрд░ рдирд┐рдпрдВрддреНрд░рдХ рд▓рд┐рдЦреЗрдВред

public class ImageController : Controller { public ActionResult Index() { return View(); } [HttpPost] public JsonResult Index(HttpPostedFileBase file) { var service = new ImageService(); byte[] data = new byte[file.ContentLength]; file.InputStream.Read(data, 0, file.ContentLength); var image = service.CreateImage(file.FileName, file.ContentType, data); JsonResult res = Json(new {image.Id}); res.ContentType = "text/html"; //  ,   jquery.form (for iframe implementation) return res; } [OutputCache(Duration = 0)] public ActionResult ById(string id) { var service = new ImageService(); var image = service.GetImage(id); return new FileStreamResult(new MemoryStream(image.Data), image.ContentType); } } 


рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХреБрдЫ рд╕реНрдерд┐рд░ рд╣реИрд╢ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ:

 class ImageService { static Dictionary<string, ImageData> _images = new Dictionary<string, ImageData>(); public ImageData CreateImage(string fileName, string contentType, byte[] data) { var image = new ImageData(fileName, contentType, data); _images.Add(image.Id, image); return image; } public ImageData GetImage(string id) { return _images[id]; } internal class ImageData { private byte[] _data; public string FileName { get; set; } public string ContentType { get; set; } public string Id { get; set; } public byte[] Data { get { return _data; } } public ImageData(string fileName, string contentType, byte[] data) { FileName = fileName; ContentType = contentType; _data = data; Id = Guid.NewGuid().ToString(); } } } 


рдмрд╛рдж рдореЗрдВ, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдбрд┐рд╕реНрдХ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЖрдЗрдП, рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдПрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реИред

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript" src="@Url.Content("~/Scripts/tiny_mce/tiny_mce_popup.js")"></script> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script> <style type="text/css"> #image {height: 262px;overflow: auto;width: 440px;} #file { opacity:0;position:relative;z-index: 2;-moz-opacity:0 ; filter:alpha(opacity: 0);width:100%;height:100% } </style> </head> <body> @using (Html.BeginForm("Index", "Image", FormMethod.Post, new { id = "upload", enctype = "multipart/form-data" })) { <div> <div> <fieldset> <legend> </legend> <div id="image"><img id="preview" alt="   " src="" /></div> <input id="file" type="file" name="file" onchange="$('#upload').submit();"/> </fieldset> </div> </div> <div> <input type="button" id="insert" name="insert" value="" /> <input type="button" id="cancel" name="cancel" value="" > </div> } </body> </html> 


рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

 $(document).ready(function () { var options = { dataType: "json", beforeSubmit: function (data) { $('#preview').attr('src', '/Content/images/spinning.gif'); }, success: function (data) { $('#preview').attr('src', '/Image/ById/' + data.Id); } }; //   $('#upload').ajaxForm(options); //       $('#preview').click(function () { $('#file').click(); }); // Auto popup file select dialog //$('#file').click(); }); 


рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИ, рдЖрдк рд╣рдорд╛рд░реЗ рдмреВрдЯрд▓реЛрдбрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕:



2. рдкреНрд▓рдЧрд┐рди


рдЕрдм рдЖрдк рдЫреЛрдЯреЗ рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╕реЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдХрд▓реНрдкрдирд╛рд╢реАрд▓рддрд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ред

editor_plugin.js

 (function() { // Load plugin specific language pack tinymce.PluginManager.requireLangPack('imagelight'); tinymce.create('tinymce.plugins.ImagelightPlugin', { init : function(ed, url) { tinyMCE.activeEditor.execCommand('mceExample'); ed.addCommand('mceImagelight', function() { ed.windowManager.open({ file : '/Image', width : 480, height : 385, inline : 1 }, { plugin_url : url // Plugin absolute URL }); }); ed.addButton('imagelight', { title : 'imagelight.desc', cmd : 'mceImagelight', image : url + '/img/imagelight.png' }); ed.onNodeChange.add(function(ed, cm, n) { cm.setActive('imagelight', n.nodeName == 'IMG'); }); }, getInfo : function() { return { longname : 'Imagelight plugin', author : 'AldeFalco', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', version : "1.0" }; } }); tinymce.PluginManager.add('imagelight', tinymce.plugins.ImagelightPlugin); })(); 


рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рднреА рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
js / рдбрд╛рдпрд▓реЙрдЧред js

 tinyMCEPopup.requireLangPack(); var ImagelightDialog = { init: function () { var options = { dataType: "json", beforeSubmit: function (data) { $('#preview').attr('src', '/Content/images/spinning.gif'); }, success: function (data) { $('#preview').attr('src', '/Image/ById/' + data.Id); } }; $('#upload').ajaxForm(options); $('#preview').click(function () { $('#file').click(); }); }, insert : function() { // Insert the contents from the input into the document tinyMCEPopup.editor.execCommand('mceInsertContent', false, $('#image').html()); tinyMCEPopup.close(); } }; tinyMCEPopup.onInit.add(ImagelightDialog.init, ImagelightDialog); 


рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - jquery рдФрд░ smallMCEPopup рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдШрд░реНрд╖ рд╣реЛрддрд╛ рд╣реИред

рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдЦреЗрдВ:

 tinyMCE.addI18n('en.imagelight',{ desc : 'Light Image Uploader' }); tinyMCE.addI18n('en.imagelight_dlg',{ title : 'Upload image', preview : 'Preview', alt : 'Click here to upload an image file', }); 


рд╣рдо рджреГрд╢реНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  <title>{#imagelight_dlg.title}</title> <script type="text/javascript" src="@Url.Content("~/Scripts/tiny_mce/plugins/imagelight/js/dialog.js")"></script> ... <div class="panel_wrapper"> <div id="general_panel" class="panel current"> <fieldset> <legend>{#imagelight_dlg.preview}</legend> <div id="image"><img id="preview" alt="{#imagelight_dlg.alt}" src="" /></div> <input id="file" type="file" name="file" onchange="$('#upload').submit();"/> </fieldset> </div> </div> <div class="mceActionPanel"> <input type="button" id="insert" name="insert" value="{#insert}" onclick="ImagelightDialog.insert();" /> <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" /> </div> } 


рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рдЖрд╕рд╛рди рдмреВрдЯрд▓реЛрдбрд░ рд╣реИред рдЗрд╕рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЗ рд▓рдЧреЗред рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо:





Source: https://habr.com/ru/post/In120168/


All Articles