Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲上傳

劍客不能說發表於2019-12-12

第1步

按 Laravel-admin 官方文件擴充套件自定義元件整合 wangEditor3 編輯器。
連結:整合富文字編輯器wangEditor

第2步

wangEditor3 demo 下載 ./demo/js/plupload 資料夾及 qiniu.js 檔案。
Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲圖片上傳

下載 Git 檔案及資料夾推薦使用:DownGit

下載完成後解壓放至專案根目錄 public/js 目錄下。
Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲圖片上傳

第3步

編輯 resources/views/admin/wang-editor.blade.php 檔案新增以下程式碼引入下載的資源。

<script type="text/javascript" src="{{ URL::asset('/js/plupload/plupload.full.min.js') }}"></script>
<script type="text/javascript" src="{{ URL::asset('/js/plupload/i18n/zh_CN.js') }}"></script>
<script src="{{ URL::asset('js/qiniu.js') }}"></script>

第4步

註釋 app/Admin/Extensions/WangEditor.php 檔案中的 render 方法。同時注意修改 $css, $js 路徑中的版本號(修改為您下載的 wangEditor3 資源對應版本)。
Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲圖片上傳

第5步

複製以下程式碼至 resources/views/admin/wang-editor.blade.php 檔案末尾。

<script>
    $(function () {
        const E = window.wangEditor
        const editor = new E('#{{ $id }}');
        editor.customConfig.zIndex = 0
        editor.customConfig.uploadImgShowBase64 = true
        editor.customConfig.onchange = function (html) {
            $("input[name='{{ $name }}']").val(html);
        }
        editor.create()

        // 初始化七牛上傳
        uploadInit()

        // 初始化七牛上傳的方法
        function uploadInit() {
            // 獲取相關 DOM 節點的 ID
            var btnId = editor.imgMenuId;
            var containerId = editor.toolbarElemId;
            var textElemId = editor.textElemId;

            // 建立上傳物件
            var uploader = Qiniu.uploader({
                runtimes: 'html5,flash,html4',    //上傳模式,依次退化
                browse_button: btnId,       //上傳選擇的點選按鈕,**必需**
                uptoken_url: '/api/uptoken',
                //Ajax請求upToken的Url,**強烈建議設定**(服務端提供)
                // uptoken : '<Your upload token>',
                //若未指定uptoken_url,則必須指定 uptoken ,uptoken由其他程式生成
                // unique_names: true,
                // 預設 false,key為檔名。若開啟該選項,SDK會為每個檔案自動生成key(檔名)
                // save_key: true,
                // 預設 false。若在服務端生成uptoken的上傳策略中指定了 `sava_key`,則開啟,SDK在前端將不對key進行任何處理
                domain: '',
                //bucket 域名,下載資源時用到,**必需**
                container: containerId,           //上傳區域DOM ID,預設是browser_button的父元素,
                max_file_size: '100mb',           //最大檔案體積限制
                flash_swf_url: "{{ URL::asset('/js/plupload/Moxie.swf') }}",  //引入flash,相對路徑
                filters: {
                    mime_types: [
                        //只允許上傳圖片檔案 (注意,extensions中,逗號後面不要加空格)
                        { title: "圖片檔案", extensions: "jpg,gif,png,bmp" }
                    ]
                },
                max_retries: 3,                   //上傳失敗最大重試次數
                dragdrop: true,                   //開啟可拖曳上傳
                drop_element: textElemId,        //拖曳上傳區域元素的ID,拖曳檔案或資料夾後可觸發上傳
                chunk_size: '4mb',                //分塊上傳時,每片的體積
                auto_start: true,                 //選擇檔案後自動上傳,若關閉需要自己繫結事件觸發上傳
                init: {
                    'FilesAdded': function(up, files) {
                        plupload.each(files, function(file) {
                            // 檔案新增進佇列後,處理相關的事情
                            printLog('on FilesAdded');
                        });
                    },
                    'BeforeUpload': function(up, file) {
                        // 每個檔案上傳前,處理相關的事情
                        printLog('on BeforeUpload');
                    },
                    'UploadProgress': function(up, file) {
                        // 顯示進度
                        printLog('進度 ' + file.percent)
                    },
                    'FileUploaded': function(up, file, info) {
                        // 每個檔案上傳成功後,處理相關的事情
                        // 其中 info 是檔案上傳成功後,服務端返回的json,形式如
                        // {
                        //    "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
                        //    "key": "gogopher.jpg"
                        //  }
                        printLog(info);
                        // 參考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html

                        var domain = up.getOption('domain');
                        var res = $.parseJSON(info);
                        var sourceLink = domain + res.key; //獲取上傳成功後的檔案的Url

                        printLog(sourceLink);

                        // 插入圖片到editor
                        editor.cmd.do('insertHtml', '<img src="' + sourceLink + '" style="max-width:100%;"/>')
                    },
                    'Error': function(up, err, errTip) {
                        //上傳出錯時,處理相關的事情
                        printLog('on Error', err);
                    },
                    'UploadComplete': function() {
                        //佇列檔案處理完畢後,處理相關的事情
                        printLog('on UploadComplete');
                    }
                    // Key 函式如果有需要自行配置,無特殊需要請註釋
                    //,
                    // 'Key': function(up, file) {
                    //     // 若想在前端對每個檔案的key進行個性化處理,可以配置該函式
                    //     // 該配置必須要在 unique_names: false , save_key: false 時才生效
                    //     var key = "";
                    //     // do something with key here
                    //     return key
                    // }
                }
                // domain 為七牛空間(bucket)對應的域名,選擇某個空間後,可透過"空間設定->基本設定->域名設定"檢視獲取
            });
        }

        // 封裝 console.log 函式
        function printLog(title, info) {
            window.console && console.log(title, info);
        }
    });
</script>

第6步

後端實現 uptoken_url 介面。
Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲圖片上傳
Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲圖片上傳
首先需要安裝七牛 PHP SDK:

composer require qiniu/php-sdk
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;

class QiniuController extends Controller
{
    private $cfg = [
        'access' => '',
        'secret' => '',
        'bucket' => '',
        'domain' => ''
    ];

    public function index()
    {
        $auth = new Auth($this->cfg['access'], $this->cfg['secret']);
        $token = $auth->uploadToken($this->cfg['bucket'], null, 3600);

        return response()->json(['uptoken' => $token]);
    }
}

最後一步

修改 public/js/qiniu.js 檔案。查詢 http://upload.qiniu.com/ 全部替換為您的儲存區域地址。

至此完成了 Laravel-admin 富文字編輯器 wangEditor3 圖片七牛雲上傳功能。如有問題和發現文章錯誤,歡迎評論區指出和討論。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章