summernote js upload image

11,776

I got it working. Here's my code. Using summernote 0.8.1, i.e. current version.

<script>

$(document).ready(function() {

var IMAGE_PATH = 'http://www.path/to/document_root/';
                  // the exact folder in the document_root
                  // will be provided by php script below

$('#summernote').summernote({
    lang: 'fr-FR', // <= nobody is perfect :)
    height: 300,
    toolbar : [
        ['style',['bold','italic','underline','clear']],
        ['font',['fontsize']],
        ['color',['color']],
        ['para',['ul','ol','paragraph']],
        ['link',['link']],
        ['picture',['picture']]
    ],
    callbacks : {
        onImageUpload: function(image) {
            uploadImage(image[0]);
        }
    }
});

function uploadImage(image) {
    var data = new FormData();
    data.append("image",image);
    $.ajax ({
        data: data,
        type: "POST",
        url: "../up.php",// this file uploads the picture and 
                         // returns a chain containing the path
        cache: false,
        contentType: false,
        processData: false,
        success: function(url) {
            var image = IMAGE_PATH + url;
            $('#summernote').summernote("insertImage", image);
            },
            error: function(data) {
                console.log(data);
                }
        });
    }

});
</script>

Here my up.php :

<?php
require('admchir/nettoie.php'); 
      // nettoie.php removes the French special chars and spaces
$image = nettoie($_FILES['image']['name']);
$uploaddir = 'photos/';
      // that's the directory in the document_root where I put pics
$uploadfile = $uploaddir . basename($image);
if( move_uploaded_file($_FILES['image']['tmp_name'],$uploadfile)) {
    echo$uploadfile;
} else {
    echo "Lo kol kakh tov..."; // <= nobody is perfect :)
}
?>

From looking for this on the internet, I got the impression that summernote changed a lot between the various versions, but didn't find a full working example of the current version. Hope this helps someone.

Share:
11,776
thiebo
Author by

thiebo

By day: history history and coding history sources. At night I dream of ruby and roman conquests

Updated on June 19, 2022

Comments

  • thiebo
    thiebo almost 2 years

    I'm using summernote version 0.8.1 (current).

    It's working. But 1 thing I struggle with. Inserting an image, rather than putting base64 dataURL, I want to upload the image to the server and insert the image URL in the database. This is my code:

    <script>
    $(document).ready(function() {
    $('#summernote').summernote({
        lang: 'fr-FR',
        height: 300,
        toolbar : [
            ['style',['bold','italic','underline','clear']],
            ['font',['fontsize']],
            ['color',['color']],
            ['para',['ul','ol','paragraph']],
            ['link',['link']],
            ['picture',['picture']]
        ],
        onImageUpload: function(files, editor, welEditable) {
            for (var i = files.lenght - 1; i >= 0; i--) {
            sendFile(files[i], this);
            }
        }
    });
    
    function sendFile(file, el) {
        var form_data = new FormData();
        form_data.append('file',file);
        $.ajax ({
            data: form_data,
            type: "POST",
            url: "../up.php",
            cache: false,
            contentType: false,
            processData: false,
            success: function(url) {
                $(el).summernote('editor.insertImage',url);
                }
            })
        }
    
    });
        </script>
    

    I have tested the script up.php and what that does is changing the file name and returning the image's url in the form "../photos/mypicture.jpg".

    The problem with the above code is that the ..up.php doesn't even seem to be called. I ran this in Firefox development tools and got no errors or warnings.

  • Mohammed Sufian
    Mohammed Sufian about 8 years
    works great, thanks a lot. Sir, I integrated it with CI 3 with CSRF protection :)
  • Phillip Y.
    Phillip Y. about 8 years
    Cool, worked for me as well. However doesn't this open up attacks by users to just flood your server with images by constantly uploading new ones in the Summernote editor, and deleting them? Is there a way to persist the images only after the blog post or whatever has been saved as well?