upload image from local into tinyMCE

后端 未结 8 812
小鲜肉
小鲜肉 2021-02-04 02:33

tinyMCE has an insert image button, but how to handle its functionality pls give some code

相关标签:
8条回答
  • 2021-02-04 02:57

    It works for image upload.Is this possible for file upload ? I want to add a custom file upload option from local into tinyMCE and want to show it by url .

     Code is something like below which not working:
    
    
       ed.addButton('mybutton2', {
            text:"File",
            icon: false,
    
            onclick: function(e) {
                console.log($(e.target));
                if($(e.target).prop("tagName") == 'BUTTON'){
                    console.log($(e.target).parent().parent().find('input').attr('id'));
                    if($(e.target).parent().parent().find('input').attr('id') != 
    'tinymce-uploader') {
                        $(e.target).parent().parent().append('<input id="tinymce- 
    uploader" type="file" name="pic" accept="*" height="100" weidth="100" 
     style="display:none">');
                    }
                    $('#tinymce-uploader').trigger('click');
                    $('#tinymce-uploader').change(function(){
                        var input, file, fr, img;
    
                        if (typeof window.FileReader !== 'function') {
                            write("The file API isn't supported on this browser yet.");
                            return;
                        }
    
                        input = document.getElementById('tinymce-uploader');
                               // var URL = document.my_form.my_field.value;
           alert(input.files[0]);
                        if (!input) {
                            write("Um, couldn't find the imgfile element.");
                        } else if (!input.files) {
                            write("This browser doesn't seem to support the `files` 
                  property of file inputs.");
    
                        } else if (!input.files[0]) {
                            write("Please select a file before clicking 'Load'");
                           alert( input.files[0]);
                        } else {
                            file = input.files[0];
                            fr = new FileReader();
                            fr.onload = createFile;
                            fr.readAsDataURL(file);
                                //  alert(fr.result);
    
                        }
    
                        function createFile() {
                           //what should I write here?
                          ed.insertContent('<a href="'+img.src+'">download 
          file_name</a>');
                        }
                    });
    
                }
    
    
    
    
    
    
    
            }
        });
    
    0 讨论(0)
  • 2021-02-04 03:00

    I have upvoted the code written by @pavanastechie, but I ended up rewriting it quite a lot. Here's a version that is far shorter, which might have value to some people

        tinymce.init({
            toolbar : "imageupload",
            setup: function(editor) {
                var inp = $('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
                $(editor.getElement()).parent().append(inp);
    
                inp.on("change",function(){
                    var input = inp.get(0);
                    var file = input.files[0];
                    var fr = new FileReader();
                    fr.onload = function() {
                        var img = new Image();
                        img.src = fr.result;
                        editor.insertContent('<img src="'+img.src+'"/>');
                        inp.val('');
                    }
                    fr.readAsDataURL(file);
                });
    
                editor.addButton( 'imageupload', {
                    text:"IMAGE",
                    icon: false,
                    onclick: function(e) {
                        inp.trigger('click');
                    }
                });
            }
        });
    

    NOTE: this relies on jquery, and won't work without it. Also, it assumes that the browser supports window.FileReader, and doesn't check for it.

    0 讨论(0)
  • 2021-02-04 03:02

    I used pavanastechie's and Chris Lear's solutions, which worked perfectly for me, and wanted to share a complete example built on theirs that uploads the image to the server and embeds the image using the URL provided back by the server:

    tinymce.init({
      toolbar: 'imageupload',
      setup: function(editor) {
        initImageUpload(editor);
      }
    });
    
    function initImageUpload(editor) {
      // create input and insert in the DOM
      var inp = $('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
      $(editor.getElement()).parent().append(inp);
    
      // add the image upload button to the editor toolbar
      editor.addButton('imageupload', {
        text: '',
        icon: 'image',
        onclick: function(e) { // when toolbar button is clicked, open file select modal
          inp.trigger('click');
        }
      });
    
      // when a file is selected, upload it to the server
      inp.on("change", function(e){
        uploadFile($(this), editor);
      });
    }
    
    function uploadFile(inp, editor) {
      var input = inp.get(0);
      var data = new FormData();
      data.append('image[file]', input.files[0]);
    
      $.ajax({
        url: '/admin/images',
        type: 'POST',
        data: data,
        processData: false, // Don't process the files
        contentType: false, // Set content type to false as jQuery will tell the server its a query string request
        success: function(data, textStatus, jqXHR) {
          editor.insertContent('<img class="content-img" src="' + data.url + '"/>');
        },
        error: function(jqXHR, textStatus, errorThrown) {
          if(jqXHR.responseText) {
            errors = JSON.parse(jqXHR.responseText).errors
            alert('Error uploading image: ' + errors.join(", ") + '. Make sure the file is an image and has extension jpg/jpeg/png.');
          }
        }
      });
    }
    
    0 讨论(0)
  • 2021-02-04 03:11

    Based on @Chris Lear's answer, I have re-modified the script so that it supports multiple file uploads to server, and removed the data image for preview after content is posted and before table is updated with a little php script

    tinymce.init({
            selector: 'textarea',
            setup: function(editor) {
                    var n = 0;
                    var form = $('#form_id'); // your form id
                    editor.addButton( 'imageupload', {
                            text:"IMAGE",
                            icon: false,
                            onclick: function(e) {
                                $(form).append('<input id="tinymce-uploader_'+n+'" class="tinymce-uploader" type="file" name="pic['+n+']" mutliple accept="image/*" style="display: none;">');
                                $('#tinymce-uploader_'+n).trigger('click');
                                n++;
                                $('.tinymce-uploader').on("change",function(){
                                        var input = $(this).get(0);
                                        var file = input.files[0];
                                        var filename = file.name;
                                        var fr = new FileReader();
                                        fr.onload = function() {
                                                var img = new Image();
                                                img.src = fr.result;
                                                editor.insertContent('<img data-name="'+filename+'" src="'+img.src+'"/>');
                                        }
                                        fr.readAsDataURL(file);
                                });
                            }
                    });
            },
    

    And on php side inside the upload php file:

    function data2src($content, $img_path ='') {
            preg_match('/data\-name="([^"]+)/i',$content, $data_name);
            $tmp = preg_replace('/src=["]data([^"]+)["]/i', '', $content);
            $content = preg_replace('/data\-name\=\"/i', 'src="'.$img_path, $tmp);
            return $content;        
        }
    
    0 讨论(0)
  • 2021-02-04 03:13

    !!!!ENJOY!!! here is the solution to load directly from local computer

    JSFIDDLE DEMO

    <textarea name="content"></textarea> <title>Local image loading in to tinymce</title> <br/> <b>Image size should be lessthan 500kb</b>

    JAVA SCRIPT CODE

    `

    tinymce.init({
        selector: "textarea",
        toolbar: "mybutton",
        setup: function(editor) {
            editor.addButton('mybutton', {
                text:"IMAGE",
                icon: false,
                onclick: function(e) {
                    console.log($(e.target));
                    if($(e.target).prop("tagName") == 'BUTTON'){
                        console.log($(e.target).parent().parent().find('input').attr('id'));
                        if($(e.target).parent().parent().find('input').attr('id') != 'tinymce-uploader') {
                            $(e.target).parent().parent().append('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
                        }
                        $('#tinymce-uploader').trigger('click');
                        $('#tinymce-uploader').change(function(){
                            var input, file, fr, img;
    
                            if (typeof window.FileReader !== 'function') {
                                write("The file API isn't supported on this browser yet.");
                                return;
                            }
    
                            input = document.getElementById('tinymce-uploader');
                            if (!input) {
                                write("Um, couldn't find the imgfile element.");
                            } else if (!input.files) {
                                write("This browser doesn't seem to support the `files` property of file inputs.");
                            } else if (!input.files[0]) {
                                write("Please select a file before clicking 'Load'");
                            } else {
                                file = input.files[0];
                                fr = new FileReader();
                                fr.onload = createImage;
                                fr.readAsDataURL(file);
                            }
    
                            function createImage() {
                                img = new Image();
                                img.src = fr.result;
                                editor.insertContent('<img src="'+img.src+'"/>');
                            }
                        });
    
                    }
    
                    if($(e.target).prop("tagName") == 'DIV'){
                        if($(e.target).parent().find('input').attr('id') != 'tinymce-uploader') {
                            console.log($(e.target).parent().find('input').attr('id'));                                
                            $(e.target).parent().append('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
                        }
                        $('#tinymce-uploader').trigger('click');
                        $('#tinymce-uploader').change(function(){
                            var input, file, fr, img;
    
                            if (typeof window.FileReader !== 'function') {
                                write("The file API isn't supported on this browser yet.");
                                return;
                            }
    
                            input = document.getElementById('tinymce-uploader');
                            if (!input) {
                                write("Um, couldn't find the imgfile element.");
                            } else if (!input.files) {
                                write("This browser doesn't seem to support the `files` property of file inputs.");
                            } else if (!input.files[0]) {
                                write("Please select a file before clicking 'Load'");
                            } else {
                                file = input.files[0];
                                fr = new FileReader();
                                fr.onload = createImage;
                                fr.readAsDataURL(file);
                            }
    
                            function createImage() {
                                img = new Image();
                                img.src = fr.result;
                                 editor.insertContent('<img src="'+img.src+'"/>');
                            }
                        });
                    }
    
                    if($(e.target).prop("tagName") == 'I'){
                        console.log($(e.target).parent().parent().parent().find('input').attr('id')); if($(e.target).parent().parent().parent().find('input').attr('id') != 'tinymce-uploader') {               $(e.target).parent().parent().parent().append('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
                                                                                               }
                        $('#tinymce-uploader').trigger('click');
                        $('#tinymce-uploader').change(function(){
                            var input, file, fr, img;
    
                            if (typeof window.FileReader !== 'function') {
                                write("The file API isn't supported on this browser yet.");
                                return;
                            }
    
                            input = document.getElementById('tinymce-uploader');
                            if (!input) {
                                write("Um, couldn't find the imgfile element.");
                            } else if (!input.files) {
                                write("This browser doesn't seem to support the `files` property of file inputs.");
                            } else if (!input.files[0]) {
                                write("Please select a file before clicking 'Load'");
                            } else {
                                file = input.files[0];
                                fr = new FileReader();
                                fr.onload = createImage;
                                fr.readAsDataURL(file);
                            }
    
                            function createImage() {
                                img = new Image();
                                img.src = fr.result;
                                 editor.insertContent('<img src="'+img.src+'"/>');
                            }
                        });
                    }
    
                }
            });
        }
    });
    

    `

    0 讨论(0)
  • 2021-02-04 03:15

    Din't try iManager but found tinyFCK good and easy to configure which gives CKEditor's filemanager integrated with TinyMCE

    1.Download TinyFCK

    2.replace filemanger folder in tinyFCK with filemanager folder of ur CKEditor

    3.code :

    -

    tinyMCE.init({
         theme : "advanced",
         file_browser_callback : "fileBrowserCallBack",
    });
    function fileBrowserCallBack(field_name, url, type, win) {
         var connector = "../../filemanager/browser.html?Connector=connectors/php/connector.php";
         var enableAutoTypeSelection = true;
         var cType;
         tinyfck_field = field_name;
         tinyfck = win;
         switch (type) {
             case "image":
                 cType = "Image";
             break;
             case "flash":
                 cType = "Flash";
             break;
             case "file":
                 cType = "File";
             break;
         }
         if (enableAutoTypeSelection && cType) {
             connector += "?Type=" + cType;
         }
         window.open(connector, "tinyfck", "modal,width=600,height=400");
      }
    
    0 讨论(0)
提交回复
热议问题