如何將CKeditor編輯器的上傳和thinkphp結合

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: ThinkPHP 2023-09-08 我要說兩句(0)

調試ckeditor的一篇技術文章。

有時候我們會發現,我們需要對上傳文档進行日志記錄,這樣的記錄通常寫在LOG文档或數據庫中,那麽,通過TP本身的上傳類,可以實現的,但是只能做到編輯器外上傳並記錄,而我們在編輯器内上傳的圖片、附件卻無法捕獲,所以這裡我分享一個我寫的小代碼片段,僅供參考。

首先如果你不知道ckeditor,那麽請忽略此文。

當我們在模板中,將ckeditor配置好後,需要在JS代碼中進行一些調整或修改,如下:

CKEDITOR.replace( 'v_content', {
                filebrowserImageUploadUrl  :  '/Files/ck_upload.shtml'
            });


這裡是在JS部分進行了修改,指定了當使用編輯器的圖片功能時,上傳的請求地址在那裡。一般來說ckeditor是不帶上傳的,你把上面的配置調整好後,點擊圖片,就會出現上傳功能,但是只是個架子,沒有實際效果。具體的處理請看下面:

function ck_upload($ftype = 'image')
    {
        if($ftype == 'image'){
            $ftype =  array('jpg', 'gif', 'png', 'jpeg', 'bmp');
        }
        header("Content-type:text/html");
        import('ORG.Net.UploadFile');
        $upload = new UploadFile(); // 實例化上傳類
        $upload->maxSize = -1; // 設置附件上傳大小
        $upload->allowExts = $ftype; // 設置附件上傳類型
        $upload->savePath = './Public/Uploads/'; // 設置附件上傳目錄
        $upload->autoSub = true;
        $upload->subType = 'date';
        if (!$upload->upload()) {// 上傳錯誤提示錯誤信息
            echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').", '/', '上傳失敗," . $upload->getErrorMsg() . "!');</script>";
        } else {
            //// 上傳成功 獲取上傳文档信息並存入數據庫
            $info = $upload->getUploadFileInfo();
    // 獲取具體的路徑,用於返回給編輯器
            $savepath = $info[0]['savepath'].$info[0]['savename'];
            //下面的輸出,會自動的將上傳成功的文档路徑,返回給編輯器。
                echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').",'$savepath','');</script>";
        }
    }


會發現TP的代碼裡,有兩耑是輸出JS的,一個是報錯,一個是返回圖片,這個自己看一下,就能懂的。很簡單的。

上傳完成後,我使用的是防盜鏈模式,所以圖片路徑是.shtml,如果你按照上面的方式,那麽你的返回路徑可能是upload/img/abc.jpg之類的。


代碼肯定沒問題的,我N個項目裡在用,這樣做的目的是,我能控制文档了,能控制它的上傳時間,對文档進行權限管理等等,這些都是很方便的。另外,在附送一個防盜鏈的方法,前提是,將圖片路徑存在數據庫裡。

我這裡,文档的表示使用的是id標示:

function getfile($id) {
        $res = M('files')->find($id);
        $file = $res['savepath'];
        if (file_exists($file)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename=' . basename($file));
            header('Content-Transfer-Encoding: binary');
            header('Pragma: public');
            $sTmpVar = fread(fopen($file, 'r'), filesize($file));
            echo $sTmpVar;
        }
    }

將就看下把,$res['savepath']就是數據庫裡的文档路徑,這個方法照抄就行了。這樣你就能把upload/img/xxx.jpg轉化成諸如file/1022.shtml之類的URL了,防盜鏈和權限還不是你說了算?

半夜了,寫的比較匆忙,大家有興趣試一下,有問題可以留言,我會抽時間回複一下的。

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評