Come puoi integrare un browser / uploader di file personalizzato con CKEditor?


112

La documentazione ufficiale è tutt'altro che chiara: qual è il modo corretto per integrare un browser / caricatore di file personalizzato con CKEditor? (v3 - non FCKEditor)

Risposte:


175

Inizia registrando il tuo browser / uploader personalizzato quando installi CKEditor. È possibile designare URL diversi per un browser di immagini rispetto a un browser di file generale.

<script type="text/javascript">
CKEDITOR.replace('content', {
    filebrowserBrowseUrl : '/browser/browse/type/all',
    filebrowserUploadUrl : '/browser/upload/type/all',
    filebrowserImageBrowseUrl : '/browser/browse/type/image',
filebrowserImageUploadUrl : '/browser/upload/type/image',
    filebrowserWindowWidth  : 800,
    filebrowserWindowHeight : 500
});
</script>

Il codice personalizzato riceverà un parametro GET denominato CKEditorFuncNum. Salvalo: questa è la tua funzione di callback. Diciamo che lo metti in $callback.

Quando qualcuno seleziona un file, esegui questo JavaScript per informare CKEditor quale file è stato selezionato:

window.opener.CKEDITOR.tools.callFunction(<?php echo $callback; ?>,url)

Dove "url" è l'URL del file che hanno scelto. Un terzo parametro opzionale può essere il testo che si desidera visualizzare in una finestra di dialogo di avviso standard, come "file illegale" o qualcosa del genere. Imposta l'URL su una stringa vuota se il terzo parametro è un messaggio di errore.

La scheda "upload" di CKEditor invierà un file nel campo "upload" - in PHP, che va a $ _FILES ['upload']. Ciò che CKEditor vuole che il tuo server emetta è un blocco JavaScript completo:

$output = '<html><body><script type="text/javascript">window.parent.CKEDITOR.tools.callFunction('.$callback.', "'.$url.'","'.$msg.'");</script></body></html>';
echo $output;

Di nuovo, è necessario fornire quel parametro di callback, l'URL del file e, facoltativamente, un messaggio. Se il messaggio è una stringa vuota, non verrà visualizzato nulla; se il messaggio è un errore, l'URL dovrebbe essere una stringa vuota.

La documentazione ufficiale di CKEditor è incompleta su tutto questo, ma se segui quanto sopra funzionerà come un campione.


29
Non riesco a credere che la documentazione degli sviluppatori per questo processo sia così scarsa. Grazie per aver inserito i dettagli.

4
Questa è stata un'ottima informazione! Waay meglio della documentazione ufficiale.
Jon Romero

2
Molte grazie! Ma è CKEditorFunNum, non Name = P
emzero

2
@emzero, penso che probabilmente fosse CKEditorFuncName, forse più CKEditor usa CKEditorFuncNum ora. Comunque la risposta è azzeccata!
Rosdi Kasim

1
Inoltre, se è necessario nascondere la "scheda Carica" ​​in modo da consentire solo il caricamento dell'immagine, è possibile utilizzare: CKEDITOR.on ('dialogDefinition', function (ev) {// Prendi il nome della finestra di dialogo e la sua definizione dall'evento / / data. var dialogName = ev.data.name; var dialogDefinition = ev.data.definition; // Controlla se la definizione proviene dalla finestra di dialogo che ci // interessa (la finestra di dialogo Collegamento e immagine). if (dialogName = = 'link' || dialogName == 'image') {// rimuovi la scheda Carica dialogDefinition.removeContents ('Upload');}});
Kristijan


10

Ho appena seguito il processo di apprendimento da solo. L'ho capito, ma sono d'accordo che la documentazione sia scritta in un modo che mi ha intimidito. Il grande momento "aha" per me è stato capire che per la navigazione, tutto ciò che CKeditor fa è aprire una nuova finestra e fornire alcuni parametri nell'URL. Ti consente di aggiungere parametri aggiuntivi ma tieni presente che dovrai usare encodeURIComponent () sui tuoi valori.

Chiamo il browser e l'uploader con

CKEDITOR.replace( 'body',  
{  
    filebrowserBrowseUrl: 'browse.php?type=Images&dir=' +  
        encodeURIComponent('content/images'),  
    filebrowserUploadUrl: 'upload.php?type=Files&dir=' +  
        encodeURIComponent('content/images')  
}

Per il browser , nella finestra aperta (browse.php) si utilizza php & js per fornire un elenco di scelte e quindi sul gestore onclick fornito, si chiama una funzione CKeditor con due argomenti, l'url / percorso dell'immagine selezionata e CKEditorFuncNum fornito da CKeditor nell'url:

function myOnclickHandler(){  
//..    
    window.opener.CKEDITOR.tools.callFunction(<?php echo $_GET['CKEditorFuncNum']; ?>, pathToImage);  
    window.close();
}       

Allo stesso modo, l' uploader chiama semplicemente l'URL che fornisci, ad esempio upload.php , e fornisce nuovamente $ _GET ['CKEditorFuncNum']. Il target è un iframe quindi, dopo aver salvato il file da $ _FILES, passi il tuo feedback a CKeditor in questo modo:

$funcNum = $_GET['CKEditorFuncNum'];  
exit("<script>window.parent.CKEDITOR.tools.callFunction($funcNum, '$filePath', '$errorMessage');</script>");  

Di seguito è riportato uno script del browser personalizzato di semplice comprensione. Sebbene non consenta agli utenti di navigare nel server, consente di indicare da quale directory estrarre i file di immagine quando si chiama il browser.

È tutta una codifica piuttosto semplice, quindi dovrebbe funzionare in tutti i browser relativamente moderni.

CKeditor apre semplicemente una nuova finestra con l'URL fornito

/*          
    in CKeditor **use encodeURIComponent()** to add dir param to the filebrowserBrowseUrl property

    Replace content/images with directory where your images are housed.
*/          
        CKEDITOR.replace( 'editor1', {  
            filebrowserBrowseUrl: '**browse.php**?type=Images&dir=' + encodeURIComponent('content/images'),  
            filebrowserUploadUrl: 'upload.php?type=Files&dir=' + encodeURIComponent('content/images') 
        });   

// ========= codice completo di seguito per browse.php

<?php  
header("Content-Type: text/html; charset=utf-8\n");  
header("Cache-Control: no-cache, must-revalidate\n");  
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");  

// e-z params  
$dim = 150;         /* image displays proportionally within this square dimension ) */  
$cols = 4;          /* thumbnails per row */
$thumIndicator = '_th'; /* e.g., *image123_th.jpg*) -> if not using thumbNails then use empty string */  
?>  
<!DOCTYPE html>  
<html>  
<head>  
    <title>browse file</title>  
    <meta charset="utf-8">  

    <style>  
        html,  
        body {padding:0; margin:0; background:black; }  
        table {width:100%; border-spacing:15px; }  
        td {text-align:center; padding:5px; background:#181818; }  
        img {border:5px solid #303030; padding:0; verticle-align: middle;}  
        img:hover { border-color:blue; cursor:pointer; }  
    </style>  

</head>  


<body>  

<table>  

<?php  

$dir = $_GET['dir'];    

$dir = rtrim($dir, '/'); // the script will add the ending slash when appropriate  

$files = scandir($dir);  

$images = array();  

foreach($files as $file){  
    // filter for thumbNail image files (use an empty string for $thumIndicator if not using thumbnails )
    if( !preg_match('/'. $thumIndicator .'\.(jpg|jpeg|png|gif)$/i', $file) )  
        continue;  

    $thumbSrc = $dir . '/' . $file;  
    $fileBaseName = str_replace('_th.','.',$file);  

    $image_info = getimagesize($thumbSrc);  
    $_w = $image_info[0];  
    $_h = $image_info[1]; 

    if( $_w > $_h ) {       // $a is the longer side and $b is the shorter side
        $a = $_w;  
        $b = $_h;  
    } else {  
        $a = $_h;  
        $b = $_w;  
    }     

    $pct = $b / $a;     // the shorter sides relationship to the longer side

    if( $a > $dim )   
        $a = $dim;      // limit the longer side to the dimension specified

    $b = (int)($a * $pct);  // calculate the shorter side

    $width =    $_w > $_h ? $a : $b;  
    $height =   $_w > $_h ? $b : $a;  

    // produce an image tag
    $str = sprintf('<img src="%s" width="%d" height="%d" title="%s" alt="">',   
        $thumbSrc,  
        $width,  
        $height,  
        $fileBaseName  
    );  

    // save image tags in an array
    $images[] = str_replace("'", "\\'", $str); // an unescaped apostrophe would break js  

}

$numRows = floor( count($images) / $cols );  

// if there are any images left over then add another row
if( count($images) % $cols != 0 )  
    $numRows++;  


// produce the correct number of table rows with empty cells
for($i=0; $i<$numRows; $i++)   
    echo "\t<tr>" . implode('', array_fill(0, $cols, '<td></td>')) . "</tr>\n\n";  

?>  
</table>  


<script>  

// make a js array from the php array
images = [  
<?php   

foreach( $images as $v)  
    echo sprintf("\t'%s',\n", $v);  

?>];  

tbl = document.getElementsByTagName('table')[0];  

td = tbl.getElementsByTagName('td');  

// fill the empty table cells with data
for(var i=0; i < images.length; i++)  
    td[i].innerHTML = images[i];  


// event handler to place clicked image into CKeditor
tbl.onclick =   

    function(e) {  

        var tgt = e.target || event.srcElement,  
            url;  

        if( tgt.nodeName != 'IMG' )  
            return;  

        url = '<?php echo $dir;?>' + '/' + tgt.title;  

        this.onclick = null;  

        window.opener.CKEDITOR.tools.callFunction(<?php echo $_GET['CKEditorFuncNum']; ?>, url);  

        window.close();  
    }  
</script>  
</body>  
</html>            

9

Ho passato un po 'a cercare di capire questo ed ecco cosa ho fatto. L'ho scomposto in modo molto semplice perché era quello di cui avevo bisogno.

Direttamente sotto l'area di testo del tuo ckeditor, inserisci il file di caricamento in questo modo >>>>

<form action="welcomeeditupload.asp" method="post" name="deletechecked">
    <div align="center">
        <br />
        <br />
        <label></label>
        <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"><%=(rslegschedule.Fields.Item("welcomevar").Value)%></textarea>
        <script type="text/javascript">
        //<![CDATA[
            CKEDITOR.replace( 'editor1',
            {
                filebrowserUploadUrl : 'updateimagedone.asp'
            });
        //]]>
        </script>
        <br />
        <br />
        <br />
        <input type="submit" value="Update">
    </div>
</form>

'e poi aggiungi il tuo file di caricamento, ecco il mio che è scritto in ASP. Se stai usando PHP, ecc., Sostituisci semplicemente l'ASP con lo script di caricamento, ma assicurati che la pagina restituisca la stessa cosa.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
    if Request("CKEditorFuncNum")=1 then
        Set Upload = Server.CreateObject("Persits.Upload")
        Upload.OverwriteFiles = False
        Upload.SetMaxSize 5000000, True
        Upload.CodePage = 65001

        On Error Resume Next
        Upload.Save "d:\hosting\belaullach\senate\legislation"

        Dim picture
        For Each File in Upload.Files
            Ext = UCase(Right(File.Path, 3))
            If Ext <> "JPG" Then
                    If Ext <> "BMP" Then
                    Response.Write "File " & File.Path & " is not a .jpg or .bmp file." & "<BR>"
                    Response.write "You can only upload .jpg or .bmp files." & "<BR>" & "<BR>"
                    End if
            Else
                File.SaveAs Server.MapPath(("/senate/legislation") & "/" & File.fileName)
                f1=File.fileName
            End If
        Next
    End if

    fnm="/senate/legislation/"&f1
    imgop = "<html><body><script type=""text/javascript"">window.parent.CKEDITOR.tools.callFunction('1','"&fnm&"');</script></body></html>;"
    'imgop="callFunction('1','"&fnm&"',"");"
    Response.write imgop
%>

8

Questo è l'approccio che ho usato. È abbastanza semplice e funziona perfettamente.

Nella directory principale dell'editor CK c'è un file chiamato config.js

Ho aggiunto questo (non hai bisogno della roba querystring, questo è solo per il nostro file manager). Ho anche incluso alcuni skinning e modifica dei pulsanti predefiniti mostrati:

CKEDITOR.editorConfig = function(config) {

    config.skin = 'v2';
    config.startupFocus = false;
    config.filebrowserBrowseUrl = '/admin/content/filemanager.aspx?path=Userfiles/File&editor=FCK';
    config.filebrowserImageBrowseUrl = '/admin/content/filemanager.aspx?type=Image&path=Userfiles/Image&editor=FCK';
    config.toolbar_Full =
    [
        ['Source', '-', 'Preview', '-'],
        ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Print', 'SpellChecker'], //, 'Scayt' 
        ['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
        '/',
        ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript'],
        ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
        ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
        ['Link', 'Unlink', 'Anchor'],
        ['Image', 'Flash', 'Table', 'HorizontalRule', 'SpecialChar'],
        '/',
        ['Styles', 'Format', 'Templates'],
        ['Maximize', 'ShowBlocks']
    ];

};

Quindi, il nostro file manager chiama questo:

opener.SetUrl('somefilename');

7

Un articolo su zerokspot intitolato Callback del browser di file personalizzato in CKEditor 3.0 gestisce questo. La sezione più rilevante è citata di seguito:

Quindi tutto ciò che devi fare dal browser dei file quando hai un file selezionato è chiamare questo codice con il numero di richiamata corretto (normalmente 1) e l'URL del file selezionato:

window.opener.CKEDITOR.tools.callFunction(CKEditorFuncNum,url);

Per il caricamento rapido il processo è abbastanza simile. All'inizio ho pensato che l'editor potesse ascoltare un codice di ritorno HTTP 200 e forse guardare in qualche campo di intestazione o qualcosa del genere per determinare la posizione del file caricato, ma poi - attraverso un monitoraggio Firebug - ho notato che tutto ciò accade dopo un caricamento è il seguente codice:

<script type="text/javascript">
window.parent.CKEDITOR.tools.callFunction(CKEditorFuncNum,url, errorMessage); </script>

Se il caricamento non è riuscito, impostare errorMessageuna stringa di lunghezza diversa da zero e svuotare l'URL e viceversa in caso di successo.


1
avresti potuto dare l'url -> zerokspot.com/weblog/2009/09/09/…
Jon Romero

1
Per quanto apprezzi che tu abbia trovato il mio blog, clops, avresti almeno potuto ricollegarti ad esso o semplicemente collegarti ad esso, invece di copiare / incollare il mio post sul blog.
Horst Gutmann

1
@ Jon e @ Horst: grazie per averlo sottolineato. Se ritaglio qualcosa di rilevante che deve essere rimesso, fammelo sapere.
Bill the Lizard

4

Inizia registrando il tuo browser / uploader personalizzato quando installi CKEditor.

<script type="text/javascript">
CKEDITOR.replace('content', {
    filebrowserUploadUrl: "Upload File Url",//http://localhost/phpwork/test/ckFileUpload.php
    filebrowserWindowWidth  : 800,
    filebrowserWindowHeight : 500
});
</script>

Codice per il file di caricamento (ckFileUpload.php) e metti il ​​file di caricamento nella directory principale del tuo progetto.

// HERE SET THE PATH TO THE FOLDERS FOR IMAGES AND AUDIO ON YOUR SERVER (RELATIVE TO THE ROOT OF YOUR WEBSITE ON SERVER)

$upload_dir = array(
 'img'=> '/phpwork/test/uploads/editor-images/',
 'audio'=> '/phpwork/ezcore_v1/uploads/editor-images/'
);

// HERE PERMISSIONS FOR IMAGE
$imgset = array(
 'maxsize' => 2000,     // maximum file size, in KiloBytes (2 MB)
 'maxwidth' => 900,     // maximum allowed width, in pixels
 'maxheight' => 800,    // maximum allowed height, in pixels
 'minwidth' => 10,      // minimum allowed width, in pixels
 'minheight' => 10,     // minimum allowed height, in pixels
 'type' => array('bmp', 'gif', 'jpg', 'jpeg', 'png'),  // allowed extensions
);

// HERE PERMISSIONS FOR AUDIO
$audioset = array(
 'maxsize' => 20000,    // maximum file size, in KiloBytes (20 MB)
 'type' => array('mp3', 'ogg', 'wav'),  // allowed extensions
);

// If 1 and filename exists, RENAME file, adding "_NR" to the end of filename (name_1.ext, name_2.ext, ..)
// If 0, will OVERWRITE the existing file
define('RENAME_F', 1);

$re = '';
if(isset($_FILES['upload']) && strlen($_FILES['upload']['name']) >1) {
  define('F_NAME', preg_replace('/\.(.+?)$/i', '', basename($_FILES['upload']['name'])));  //get filename without extension

  // get protocol and host name to send the absolute image path to CKEditor
  $protocol = !empty($_SERVER['HTTPS']) ? 'https://' : 'http://';
  $site = $protocol. $_SERVER['SERVER_NAME'] .'/';
  $sepext = explode('.', strtolower($_FILES['upload']['name']));
  $type = end($sepext);    // gets extension
  $upload_dir = in_array($type, $imgset['type']) ? $upload_dir['img'] : $upload_dir['audio'];
  $upload_dir = trim($upload_dir, '/') .'/';

  //checkings for image or audio
  if(in_array($type, $imgset['type'])){
    list($width, $height) = getimagesize($_FILES['upload']['tmp_name']);  // image width and height
    if(isset($width) && isset($height)) {
      if($width > $imgset['maxwidth'] || $height > $imgset['maxheight']) $re .= '\\n Width x Height = '. $width .' x '. $height .' \\n The maximum Width x Height must be: '. $imgset['maxwidth']. ' x '. $imgset['maxheight'];
      if($width < $imgset['minwidth'] || $height < $imgset['minheight']) $re .= '\\n Width x Height = '. $width .' x '. $height .'\\n The minimum Width x Height must be: '. $imgset['minwidth']. ' x '. $imgset['minheight'];
      if($_FILES['upload']['size'] > $imgset['maxsize']*1000) $re .= '\\n Maximum file size must be: '. $imgset['maxsize']. ' KB.';
    }
  }
  else if(in_array($type, $audioset['type'])){
    if($_FILES['upload']['size'] > $audioset['maxsize']*1000) $re .= '\\n Maximum file size must be: '. $audioset['maxsize']. ' KB.';
  }
  else $re .= 'The file: '. $_FILES['upload']['name']. ' has not the allowed extension type.';

  //set filename; if file exists, and RENAME_F is 1, set "img_name_I"
  // $p = dir-path, $fn=filename to check, $ex=extension $i=index to rename
  function setFName($p, $fn, $ex, $i){
    if(RENAME_F ==1 && file_exists($p .$fn .$ex)) return setFName($p, F_NAME .'_'. ($i +1), $ex, ($i +1));
    else return $fn .$ex;
  }

  $f_name = setFName($_SERVER['DOCUMENT_ROOT'] .'/'. $upload_dir, F_NAME, ".$type", 0);
  $uploadpath = $_SERVER['DOCUMENT_ROOT'] .'/'. $upload_dir . $f_name;  // full file path

  // If no errors, upload the image, else, output the errors
  if($re == '') {
    if(move_uploaded_file($_FILES['upload']['tmp_name'], $uploadpath)) {
      $CKEditorFuncNum = $_GET['CKEditorFuncNum'];
      $url = $site. $upload_dir . $f_name;
      $msg = F_NAME .'.'. $type .' successfully uploaded: \\n- Size: '. number_format($_FILES['upload']['size']/1024, 2, '.', '') .' KB';
      $re = in_array($type, $imgset['type']) ? "window.parent.CKEDITOR.tools.callFunction($CKEditorFuncNum, '$url', '$msg')"  //for img
       : 'var cke_ob = window.parent.CKEDITOR; for(var ckid in cke_ob.instances) { if(cke_ob.instances[ckid].focusManager.hasFocus) break;} cke_ob.instances[ckid].insertHtml(\'<audio src="'. $url .'" controls></audio>\', \'unfiltered_html\'); alert("'. $msg .'"); var dialog = cke_ob.dialog.getCurrent();  dialog.hide();';
    }
    else $re = 'alert("Unable to upload the file")';
  }
  else $re = 'alert("'. $re .'")';
}

@header('Content-type: text/html; charset=utf-8');
echo '<script>'. $re .';</script>';

La documentazione di Ck-editor non è chiara dopo aver fatto un sacco di ricerca e sviluppo per il caricamento di file personalizzati, finalmente ho trovato questa soluzione. Funziona per me e spero che possa aiutare anche gli altri.


1

Per le persone che si interrogano su un'implementazione Servlet / JSP, ecco come procedere ... spiegherò anche uploadimage di seguito.

1) Innanzitutto assicurati di aver aggiunto il filebrowser e la variabile uploadimage al tuo file config.js. Assicurati di avere anche la cartella uploadimage e filebrowser all'interno della cartella dei plugin.

2) Questa parte è dove mi ha fatto inciampare:

La documentazione del sito Web di Ckeditor dice che è necessario utilizzare questi due metodi:

function getUrlParam( paramName ) {
    var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' );
    var match = window.location.search.match( reParam );
    return ( match && match.length > 1 ) ? match[1] : null;
}
function returnFileUrl() {
    var funcNum = getUrlParam( 'CKEditorFuncNum' );
    var fileUrl = 'https://patiliyo.com/wp-content/uploads/2017/07/ruyada-kedi-gormek.jpg';
    window.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl );
    window.close();
}

Quello che non menzionano è che questi metodi devono trovarsi su una pagina diversa e non sulla pagina da cui si fa clic sul pulsante Sfoglia server .

Quindi, se hai inizializzato ckeditor in page editor.jsp, devi creare un browser di file (con html / css / javascript di base) nella pagina filebrowser.jsp .

editor.jsp (tutto ciò di cui hai bisogno è questo nel tag dello script) Questa pagina aprirà filebrowser.jsp in una mini finestra quando fai clic sul pulsante Sfoglia server.

CKEDITOR.replace( 'editor', {
    filebrowserBrowseUrl: '../filebrowser.jsp', //jsp page with jquery to call servlet and get image files to view
    filebrowserUploadUrl: '../UploadImage', //servlet

});

filebrowser.jsp (è il browser di file personalizzato che hai creato e che conterrà i metodi sopra menzionati)

<head>
<script src="../../ckeditor/ckeditor.js"></script>
</head>
<body>
<script>


function getUrlParam( paramName ) {
    var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' );
    var match = window.location.search.match( reParam );
    return ( match && match.length > 1 ) ? match[1] : null;
}

function returnFileUrl() {
    var funcNum = getUrlParam( 'CKEditorFuncNum' );
var fileUrl = 'https://patiliyo.com/wp-content/uploads/2017/07/ruyada-kedi-gormek.jpg';
    window.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl );
    window.close();
}


//when this window opens it will load all the images which you send from the FileBrowser Servlet. 
getImages();
function getImages(){
    $.get("../FileBrowser", function(responseJson) {    
        //do something with responseJson (like create <img> tags and update the src attributes) 
    });
}

   //you call this function and pass 'fileUrl' when user clicks on an image that you loaded into this window from a servlet
returnFileUrl();
</script>
</body>

3) Il FileBrowser Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Images i = new Images();
    List<ImageObject> images = i.getImages(); //get images from your database or some cloud service or whatever (easier if they are in a url ready format)
    String json = new Gson().toJson(images);
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

4) UploadImage Servlet

Torna al tuo file config.js per ckeditor e aggiungi la seguente riga:

//https://docs.ckeditor.com/ckeditor4/latest/guide/dev_file_upload.html
config.uploadUrl = '/UploadImage';

Quindi puoi trascinare e rilasciare i file anche:

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


                Images i = new Images();

   //do whatever you usually do to upload your image to your server (in my case i uploaded to google cloud storage and saved the url in a database. 

   //Now this part is important. You need to return the response in json format. And it has to look like this:

//      https://docs.ckeditor.com/ckeditor4/latest/guide/dev_file_upload.html
//      response must be in this format:
//      {
//          "uploaded": 1,
//          "fileName": "example.png",
//          "url": "https://www.cats.com/example.png"
//      }

                    String image = "https://www.cats.com/example.png";
                        ImageObject objResponse = i.getCkEditorObjectResponse(image);
                        String json = new Gson().toJson(objResponse);
                        response.setContentType("application/json");
                        response.setCharacterEncoding("UTF-8");
                        response.getWriter().write(json);
                    }
                }

E questo è tutto gente. Spero che aiuti qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.