【问题标题】:CKEditor, Image Upload (filebrowserUploadUrl)CKEditor, 图片上传 (filebrowserUploadUrl)
【发布时间】:2011-01-08 02:07:28
【问题描述】:

我正在使用 CKEditor,并希望能够允许用户在文本编辑器中上传和嵌入图像...

以下 JS 是加载 CKEditor 的内容:

CKEDITOR.replace('meeting_notes', {
    startupFocus: true,
    toolbar: [
        ['ajaxsave'],
        ['Bold', 'Italic', 'Underline', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink'],
        ['Cut', 'Copy', 'Paste', 'PasteText'],
        ['Undo', 'Redo', '-', 'RemoveFormat'],
        ['TextColor', 'BGColor'],
        ['Maximize', 'Image']
    ],
    filebrowserUploadUrl: '/notes/add/ajax/upload-inline-image/index.cfm'
});

我遇到的困难是filebrowserUploadUrl。该 URL 应该返回到 CKEditor 以使此过程正常工作?

谢谢

【问题讨论】:

  • 寻求解决方案的人不应忽视 Stack Exchange 有一个特定的 Drupal 站点来处理 Drupal 问题,并且提供了另一种上传图片的方式:drupal.stackexchange.com/questions/10383/…
  • @kubilay CKEditor 库不是 Drupal 本身的一部分;这是第三方插件。

标签: ckeditor


【解决方案1】:

该 URL 将指向您自己的服务器端文件上传操作。文档没有详细介绍,但幸运的是 Don Jones 填补了这里的一些空白:

How can you integrate a custom file browser/uploader with CKEditor?

另见:

http://zerokspot.com/weblog/2009/09/09/custom-filebrowser-callbacks-ckeditor/

【讨论】:

  • 帮助...我已经按照下面的说明进行操作,服务器正在输出一个与上面完全相同的 JavaScript 块...问题是 CKEDITOR 没有做任何事情,文本很简单显示在 UPLOAD 选项卡中,而不是切换选项卡并获取 URL... 是否有我需要确保启用的回调的配置或插件?谢谢!!! ——
  • 嗯...不确定,抱歉。我将这个答案发布为 CW 只是为了发布链接。 :(
【解决方案2】:

该 URL 应指向您可能拥有的自定义文件浏览器 URL。

我已经在我的一个项目中做到了这一点,我已经在我的博客上发布了关于这个主题的教程

http://www.mixedwaves.com/2010/02/integrating-fckeditor-filemanager-in-ckeditor/

如果您不想自己制作,本教程将逐步说明如何将 FCKEditor 的内置 FileBrowser 集成到 CKEditor 中。很简单。

【讨论】:

  • 很棒的教程。您是否注意到 Chrome 20.0.1132.57 中的文件浏览器弹出窗口没有显示?
  • 只是想说 - 你摇滚!很棒的教程。
  • @Penuel,兄弟你能看看我的问题stackoverflow.com/questions/45397155/… 吗?
  • @NarendraVerma 现在似乎工作正常。可能是一些临时问题?
  • 对不起,我使用的路径有拼写错误。再次感谢!
【解决方案3】:

我的最新一期是如何在 CKEditor 中集成 CKFinder 进行图像上传。解决方案在这里。

  1. 下载 CKEditor 并解压到您的 Web 文件夹根目录中。

  2. 下载 CKFinder 并使用 ckeditor 文件夹解压。

  3. 然后添加对CKEditor、CKFinder和put的引用

     <CKEditor:CKEditorControl ID="CKEditorControl1" runat="server"></CKEditor:CKEditorControl>
    

    到您的 aspx 页面。

  4. 在页面 OnLoad 事件后面的代码中添加此代码 sn-p

    protected override void OnLoad(EventArgs e)
    {
      CKFinder.FileBrowser _FileBrowser = new CKFinder.FileBrowser();
      _FileBrowser.BasePath = "ckeditor/ckfinder/";
      _FileBrowser.SetupCKEditor(CKEditorControl1);
    }
    
  5. 编辑 Confic.ascx 文件。

    public override bool CheckAuthentication()
    {
      return true;
    }
    
    // Perform additional checks for image files.
    SecureImageUploads = true;
    

(source)

【讨论】:

  • 单独的链接是considered a poor answer,因为它本身没有意义,并且不能保证目标资源将来仍然存在。请尝试至少包含您链接到的信息摘要。
【解决方案4】:

新的 CKeditor 不包括文件管理器(CKFinder 是付费的)。 您可以在CKeditor中集成美观且易于实现的免费文件管理器。

http://labs.corefive.com/2009/10/30/an-open-file-manager-for-ckeditor-3-0/

您下载它,将其复制到您的项目中。 所有说明都在那里,但您基本上只是将添加的文件管理器 index.html 页面的路径放在代码中。

CKEDITOR.replace( 'meeting_notes',
{
startupFocus : true,
toolbar :
[
['ajaxsave'],
['Bold', 'Italic', 'Underline', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],
['Cut','Copy','Paste','PasteText'],
['Undo','Redo','-','RemoveFormat'],
['TextColor','BGColor'],
['Maximize', 'Image']
],
filebrowserUploadUrl : '/filemanager/index.html' // you must write path to filemanager where you have copied it.
});    

支持大多数语言(php、asp、MVC && aspx - ashx、...)。

【讨论】:

【解决方案5】:

如果您不想购买 CKFinder,就像我不想购买 CKFinder 一样,那么我为 CKEditor 4 编写了一个非常可靠的上传器。它由第二个表单组成,直接放在您的 textarea 表单上方,并利用 iframe hack,尽管它的名称如此,但它是无缝且不引人注目的。

成功上传图片后,它会出现在您的 CKEditor 窗口中,以及已经存在的任何内容。

editor.php(表单页面):

<?php
set_time_limit ( 3600 )
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Content Editor</title>
<link href="jquery-ui-1.10.2/themes/vader/ui.dialog.css" rel="stylesheet" media="screen" id="dialog_ui" />
<link href="jquery-ui-1.10.2/themes/vader/jquery-ui.css" rel="stylesheet" media="screen" id="dialog_ui" />
<script src="jquery-ui-1.10.2/jquery-1.9.1.js"></script>
<script src="jquery-ui-1.10.2/jquery.form.js"></script>
<script src="jquery-ui-1.10.2/ui/jquery-ui.js"></script>
<script src="ckeditor/ckeditor.js"></script>
<script src="ckeditor/config.js"></script>
<script src="ckeditor/adapters/jquery.js"></script>
<script src="ckeditor/plugin2.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $('#editor').ckeditor({ height: 400, width:600});
});

function placePic(){

    function ImageExist(url){
       var img = new Image();
       img.src = url;
       return img.height != 0;
    }

var filename = document.forms['uploader']['uploadedfile'].value;
document.forms['uploader']['filename'].value = filename;
var url = 'http://www.mydomain.com/external/images/cms/'+filename;
document.getElementById('uploader').submit();
var string = CKEDITOR.instances.editor.getData();
var t = setInterval(function(){

            var exists = ImageExist(url);
            if(exists === true){
                    if(document.getElementById('loader')){
                        document.getElementById('loader').parentNode.removeChild(document.getElementById('loader'));
                    }
                    CKEDITOR.instances.editor.setData(string + "<img src=\""+url+"\" />");
                    clearInterval(t);
            }
            else{
                if(! document.getElementById("loader")){
                    var loader = document.createElement("div");
                    loader.setAttribute("id","loader");
                    loader.setAttribute("style","position:absolute;margin:-300px auto 0px 240px;width:113px;height:63px;text-align:center;z-index:10;");
                    document.getElementById('formBox').appendChild(loader);

                    var loaderGif = document.createElement("img");
                    loaderGif.setAttribute("id","loaderGif");
                    loaderGif.setAttribute("style","width:113px;height:63px;text-align:center;");
                    loaderGif.src = "external/images/cms/2dumbfish.gif";
                    document.getElementById('loader').appendChild(loaderGif);
                }
            }

            },100);
}

function loadContent(){
if(document.forms['editorform']['site'].value !== "" && document.forms['editorform']['page'].value !== ""){
    var site = document.forms['editorform']['site'].value;
    var page = document.forms['editorform']['page'].value;
    var url = site+"/"+page+".html";
    $.ajax({
        type: "GET",
        url: url,
        dataType: 'html',
        success: function (html) {
            CKEDITOR.instances.editor.setData(html);
        }
    });
}
}
</script>
<style>
button{
  width: 93px;
  height: 28px;
  border:none;
  padding: 0 4px 8px 0;
  font-weight:bold
}
#formBox{
    width:50%;
margin:10px auto 0px auto;
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
}
#field{
position:absolute;
top:10px;
margin-left:300px;
margin-bottom:20px;
}
#target{
position:absolute;
top:100px;
left:100px;
width:400px;
height:100px;
display:none;
}
.textField{
    padding-left: 1px;
border-style: solid;
border-color: black;
border-width: 1px;
font-family: helvetica, arial, sans serif;
padding-left: 1px;
}
#report{
float:left;
margin-left:20px;
margin-top:10px;
font-family: helvetica, arial, sans serif;
font-size:12px;
color:#900;
}
</style>
</head>

<body>
<?php
if(isset($_GET['r'])){ ?><div id="report">
<?php echo $_GET['r']; ?> is changed.
</div><?php
}
?>
<div id="formBox">
<form id="uploader" name="uploader" action="editaction.php"  method="post" target="target" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
<input type="hidden" name="filename" value="" />
Insert image:&nbsp;<input name="uploadedfile" type="file" class="textField" onchange="placePic();return false;" />&nbsp;&nbsp;
</form>

<form name="editorform" id="editorform" method="post" action="editaction.php" >
<div id="field" >Site:&nbsp;<select name="site"  class="textField" onchange="loadContent();return false;">
    <option value=""></option>
    <option value="scubatortuga">scubatortuga</option>
    <option value="drytortugascharters">drytortugascharters</option>
    <option value="keyscombo">keyscombo</option>
    <option value="keywesttreasurehunters">keywesttreasurehunters</option>
    <option value="spearfishkeywest">spearfishkeywest</option>
</select>
Page:&nbsp;<select name="page" class="textField" onchange="loadContent();return false;">
    <option value=""></option>
    <option value="one">1</option>
    <option value="two">2</option>
    <option value="three">3</option>
    <option value="four">4</option>
</select>
</div><br />
<textarea name="editor" id="editor"></textarea><br />
<input type="submit" name="submit" value="Submit" />
</form>
</div>
<iframe name="target" id="target"></iframe>
</body>
</html>

这里是操作页面,editaction.php,它执行实际的文件上传:

<?php
//editaction.php

foreach($_POST as $k => $v){
    ${"$k"} = $v;
}
//fileuploader.php
if($_FILES){
  $target_path = "external/images/cms/";
  $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
  if(! file_exists("$target_path$filename")){
    move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path);
  }
}
else{
    $string = stripslashes($editor);
    $filename = "$site/$page.html";
    $handle = fopen($filename,"w");
    fwrite($handle,$string,strlen($string));
    fclose($handle);
    header("location: editor.php?r=$filename");
}
?>

【讨论】:

    【解决方案6】:

    要上传图像,只需从您的桌面或任何地方拖放即可通过复制图像并使用 ctrl+v 将其粘贴到文本区域来实现此目的

    【讨论】:

    • 这不是一个正确的答案
    【解决方案7】:

    可能为时已晚。您的代码是正确的,因此请再次检查您在 filebrowserUploadUrl 中的网址

    CKEDITOR.replace( 'editor1', {
        filebrowserUploadUrl: "upload/upload.php" 
    } );
    

    还有 Upload.php 文件

    if (file_exists("images/" . $_FILES["upload"]["name"]))
    {
     echo $_FILES["upload"]["name"] . " already exists. ";
    }
    else
    {
     move_uploaded_file($_FILES["upload"]["tmp_name"],
     "images/" . $_FILES["upload"]["name"]);
     echo "Stored in: " . "images/" . $_FILES["upload"]["name"];
    }
    

    【讨论】:

    • 您应该包含链接中的代码示例。以防链接断开。
    • 我喜欢这个,因为它是最简单的解决方案,根本不需要任何插件。
    • 这是最好的答案!
    • 我收到“服务器响应不正确”。 .请帮帮我?
    【解决方案8】:

    对于那些在 Grails ckeditor 插件中遇到相同问题的人,请给予

    filebrowserUploadUrl:'/YourAppName/ck/ofm'

    调用处理图片上传的函数。如果你想使用你自己的自定义函数,你可以给出那个文件路径。

    【讨论】:

      【解决方案9】:

      我最近也需要这个问题的答案,我花了几个小时才弄明白,所以我决定用一些更新的信息和完整的答案重新提出这个问题。

      最终我偶然发现了this tutorial,它很好地向我解释了这一点。为了stackoverflow,我将在这里重申教程,以防它被删除。我还将包括我对教程所做的一些更改,以使其成为更灵活的解决方案。


      开始

      让我们从 ckeditor 的任何版本开始,(基本、标准、完整、自定义)唯一的要求是您拥有插件 imagefilebrowser

      (在撰写本文时,所有软件包都包含这两个插件,除了基本的,但可以添加到基本的)

      上传必要的 ckeditor 文件后,请确保您的安装工作正常。

      确保链接您的 ckeditor.js 文件脚本&lt;script src="ckeditor/ckeditor.js"&gt;&lt;/script&gt;,然后像这样初始化它:

      $(document).ready(function() {
          CKEDITOR.replace( 'editor1' );
      });
      <textarea name="editor1"></textarea>
      

      CKEditor 配置

      现在我们必须告诉 CKEditor 我们要启用上传。您可以通过进入您的 ckeditor 文件夹并编辑“config.js”来完成此操作。我们需要添加这一行:

      config.filebrowserUploadUrl = '/uploader/upload.php'; 在主函数 E.G 中的某处

      CKEDITOR.editorConfig = function( config ) {
          // Define changes to default configuration here. For example:
          // config.language = 'fr';
          // config.uiColor = '#AADC6E';
      
          config.filebrowserUploadUrl = '/uploader/upload.php';
      };
      

      注意:此 URL 来自您的项目根目录。无论您从何处加载此文件,它都将从您的站点索引开始。意思是,如果您的 URL 是 example.com,则此 URL 指向 http://example.com/uploader/upload.php

      在此之后,CKEditor 配置完成!这很容易吧?

      事实上,如果你现在再去测试你的图片上传,你会得到一个上传选项,虽然它还不能完全工作。


      服务器配置

      现在您会在此步骤之前的步骤中注意到它以upload.php 文件结尾。这是难倒我的部分,我认为会有一些默认值可以与此相关,但据我所知没有。幸运的是,我找到了一个可行的方法,并对其进行了一些更改以允许更多自定义。

      所以让我们转到您在上一步中提供的路径,为了在本教程中保持连续性,我将使用/uploader/upload.php

      在这个位置,创建一个名为(你猜对了)upload.php 的文件。

      这个文件将处理我们的文件上传。

      我将放入我的自定义上传类,但它基于我找到并分叉的this github

      上传.php:

      <?php
      // Upload script for CKEditor.
      // Use at your own risk, no warranty provided. Be careful about who is able to access this file
      // The upload folder shouldn't be able to upload any kind of script, just in case.
      // If you're not sure, hire a professional that takes care of adjusting the server configuration as well as this script for you.
      // (I am not such professional)
      
      // Configuration Options: Change these to alter the way files being written works
      $overwriteFiles = false;
      
      //THESE SETTINGS ONLY MATTER IF $overwriteFiles is FALSE
      
          //Seperator between the name of the file and the generated ending.
          $keepFilesSeperator = "-"; 
      
          //Use "number" or "random". "number" adds a number, "random" adds a randomly generated string.
          $keepFilesAddonType = "random"; 
      
          //Only usable when $keepFilesAddonType is "number", this specifies where the number starts iterating from.
          $keepFilesNumberStart = 1; 
      
          //Only usable when $keepFilesAddonType is "random", this specifies the length of the string.
          $keepFilesRandomLength = 4; 
      
      //END FILE OVERWRITE FALSE SETTINGS
      
      // Step 1: change the true for whatever condition you use in your environment to verify that the user
      // is logged in and is allowed to use the script
      if (true) {
          echo("You're not allowed to upload files");
          die(0);
      }
      
      // Step 2: Put here the full absolute path of the folder where you want to save the files:
      // You must set the proper permissions on that folder (I think that it's 644, but don't trust me on this one)
      // ALWAYS put the final slash (/)
      $basePath = "/home/user/public_html/example/pages/projects/uploader/files/";
      
      // Step 3: Put here the Url that should be used for the upload folder (it the URL to access the folder that you have set in $basePath
      // you can use a relative url "/images/", or a path including the host "http://example.com/images/"
      // ALWAYS put the final slash (/)
      $baseUrl = "http://example.com/pages/projects/uploader/files/";
      
      // Done. Now test it!
      
      
      
      // No need to modify anything below this line
      //----------------------------------------------------
      
      // ------------------------
      // Input parameters: optional means that you can ignore it, and required means that you
      // must use it to provide the data back to CKEditor.
      // ------------------------
      
      // Optional: instance name (might be used to adjust the server folders for example)
      $CKEditor = $_GET['CKEditor'] ;
      
      // Required: Function number as indicated by CKEditor.
      $funcNum = $_GET['CKEditorFuncNum'] ;
      
      // Optional: To provide localized messages
      $langCode = $_GET['langCode'] ;
      
      // ------------------------
      // Data processing
      // ------------------------
      
      // The returned url of the uploaded file
      $url = '' ;
      
      // Optional message to show to the user (file renamed, invalid file, not authenticated...)
      $message = '';
      
      // in CKEditor the file is sent as 'upload'
      if (isset($_FILES['upload'])) {
          // Be careful about all the data that it's sent!!!
          // Check that the user is authenticated, that the file isn't too big,
          // that it matches the kind of allowed resources...
          $name = $_FILES['upload']['name'];
      
          //If overwriteFiles is true, files will be overwritten automatically.
          if(!$overwriteFiles) 
          {
              $ext = ".".pathinfo($name, PATHINFO_EXTENSION);
              // Check if file exists, if it does loop through numbers until it doesn't.
              // reassign name at the end, if it does exist.
              if(file_exists($basePath.$name)) 
              {
                  if($keepFilesAddonType == "number") {
                      $operator = $keepFilesNumberStart;
                  } else if($keepFilesAddonType == "random") {
                      $operator = bin2hex(openssl_random_pseudo_bytes($keepFilesRandomLength/2));
                  }
                  //loop until file does not exist, every loop changes the operator to a different value.
                  while(file_exists($basePath.$name.$keepFilesSeperator.$operator)) 
                  {
                      if($keepFilesAddonType == "number") {
                          $operator++;
                      } else if($keepFilesAddonType == "random") {
                          $operator = bin2hex(openssl_random_pseudo_bytes($keepFilesRandomLength/2));
                      }
                  }
                  $name = rtrim($name, $ext).$keepFilesSeperator.$operator.$ext;
              }
          }
          move_uploaded_file($_FILES["upload"]["tmp_name"], $basePath . $name);
      
          // Build the url that should be used for this file   
          $url = $baseUrl . $name ;
      
          // Usually you don't need any message when everything is OK.
      //    $message = 'new file uploaded';   
      }
      else
      {
          $message = 'No file has been sent';
      }
      // ------------------------
      // Write output
      // ------------------------
      // We are in an iframe, so we must talk to the object in window.parent
      echo "<script type='text/javascript'> window.parent.CKEDITOR.tools.callFunction($funcNum, '$url', '$message')</script>";
      
      ?>
      

      我对此类所做的更改允许您启用/禁用文件覆盖,并在您不想覆盖文件时为您提供一些选项。原始类总是在没有选项的情况下覆盖。

      默认情况下,此类设置为保留所有文件,不覆盖。您可以使用这些设置来更好地满足您的需求。

      如果你注意到,有一段代码只是一个if(true) 语句,显然这总是正确的

      if (true) {
          echo("You're not allowed to upload files");
          die(0);
      }
      

      这是为了安全。这是您应该检查上传的用户是否已登录/允许上传的地方。如果您不担心,可以删除这些代码行或将其设置为 if(false) (不推荐)

      您还需要编辑$basePath$baseUrl 变量以满足您的服务器需求,否则它将无法工作。除非你想玩,否则下面的所有东西都可以单独放置。

      此类不提供文件保护,您可能需要对其进行一些处理以使其更安全,因此人们无法将脚本或病毒上传到您的服务器。


      我希望这个小教程对某人有所帮助,因为我花了很长时间试图让它为自己工作,我希望我可以为其他人节省一些时间。

      我在上面链接的该教程中还有一些巧妙的故障排除步骤,如果出现问题,它们可能会帮助您找出问题所在。

      【讨论】:

        【解决方案10】:

        您可以使用此代码

             <script>
                        // Replace the <textarea id="editor"> with a CKEditor
                        // instance, using default configuration.
        
                        CKEDITOR.config.filebrowserImageBrowseUrl = '/admin/laravel-filemanager?type=Files';
                        CKEDITOR.config.filebrowserImageUploadUrl = '/admin/laravel-filemanager/upload?type=Images&_token=';
                        CKEDITOR.config.filebrowserBrowseUrl = '/admin/laravel-filemanager?type=Files';
                        CKEDITOR.config.filebrowserUploadUrl = '/admin/laravel-filemanager/upload?type=Files&_token=';
        
                        CKEDITOR.replaceAll( 'editor');
           </script>
        

        【讨论】:

          【解决方案11】:

          对于 CKeditor 版本 4,编辑器期望从服务器端返回 JSON。旧版本可能需要 text/html 类型的响应,带有 javascript sn-p。有关 Explanation of return formats 的说明,请参阅此链接。在服务器端,如果您使用的是 C#,您可以制作这样的数据模型:

          namespace editors.Models
          {
              public class PostModel
              {
                  public string CKEditor { get; set; }  // for older editors
                  public string CKEditorFuncNum { get; set; }  // for older editors
                  public string langCode { get; set; }  // for older editors
                  public int uploaded { get; set; } 
                  public string filename { get; set; }
              }
          }
          

          然后从您的上传例程返回结果:

          PostModel fez = new PostModel { CKEditor = "TheEditor1", CKEditorFuncNum = "1", langCode = "en", uploaded = 1, filename = "/images/in/" + filenameVariable };
          return Ok(fez);
          

          虽然 .net 很可能会自动生成 json,但请确保您返回的是内容类型的 application/json。

          对于那些想要检查上传文件是否真的是图像文件的人来说,这是一个旁注;如果您使用的是 Asp.net core,则需要以非标准方式安装 system.drawing 库。 Here's how to do that

          另请注意,您可以将 config.js 文件中的发布类型更改为 config.filebrowserUploadMethod='form'; ,而不是 config.filebrowserUploadMethod='xhr';

          【讨论】:

            【解决方案12】:

            这个简单的演示可以帮助你得到你想要的。 这是您要上传图片的 html/php 代码:

            <html>
            <head>
             <script src="http://cdn.ckeditor.com/4.6.2/standard-all/ckeditor.js"></script>
              </head>
            <body>
            <form  action="index.php" method="POST"  style="width:500xp;">
            
            <textarea rows="5" name="content" id="content"></textarea>
            
            <br>
            <input type="submit" name="submit" value="Post">
            
            </form>
            <script>
             CKEDITOR.replace( 'content', {
              height: 300,
              filebrowserUploadUrl: "upload.php"
             });
            </script>
            </body>
            </html>
            

            这里是upload.php 文件的代码。

             <?php
            if(isset($_FILES['upload']['name']))
            {
             $file = $_FILES['upload']['tmp_name'];
             $file_name = $_FILES['upload']['name'];
             $file_name_array = explode(".", $file_name);
             $extension = end($file_name_array);
             //we want to save the image with timestamp and randomnumber
             $new_image_name = time() . rand(). '.' . $extension;
             chmod('upload', 0777);
             $allowed_extension = array("jpg", "gif", "png");
             if(in_array($extension, $allowed_extension))
             {
              move_uploaded_file($file, 'upload/' . $new_image_name);
              $function_number = $_GET['CKEditorFuncNum'];
              $url = 'upload/' . $new_image_name;
              $message = '';
              echo "<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction($function_number, '$url', '$message');</script>";
             }
            }
            ?>
            

            注意:不要忘记在同一文件夹中创建一个“上传”文件夹,并将所有三个文件保存在同一目录中。稍后,您可以在了解其工作原理后更改其目录。也不要忘记按下发送到服务器,如下图所示。

            【讨论】:

              猜你喜欢
              • 2010-11-30
              • 2019-07-16
              • 2020-06-07
              • 2013-06-05
              • 1970-01-01
              • 2020-11-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多