1.版本選擇
GitHub上的最新版(1.5)沒有提供后端代碼。想要后端代碼可以下載歷史版本(1.4.3.3)。
1.5版本:https://github.com/fex-team/ueditor
1.4.3.3版本:https://github.com/fex-team/ueditor/releases/tag/v1.4.3.3
2.部署
(原文:https://xoyozo.net/Blog/Details/how-to-config-ueditor-with-asp-net)
客戶端部署
本例將上述所有目錄和文件拷貝到網站目錄 /libs/ueditor/ 下。
當然也可以引用 CDN 靜態資源,但會遇到諸多跨域問題,不建議。
在內容編輯頁面引入:
<script src="/libs/ueditor/ueditor.config.js"></script> <script src="/libs/ueditor/ueditor.all.min.js"></script>
在內容顯示頁面引入:
<script src="/libs/ueditor/ueditor.parse.min.js"></script>
如需修改編輯器資源文件根路徑,參 ueditor.config.js 文件內頂部文件。(一般不需要單獨設置)
如果使用 CDN,那么在初始化 UE 實例的時候應配置 serverUrl 值(即 controller.ashx 所在路徑)。
初始化 UE 實例:
var ue = UE.getEditor('tb_content', { // serverUrl: '/libs/ueditor/net/controller.ashx', // 指定服務端接收文件路徑 initialFrameWidth: '100%' });
其它參數見官方文檔,或 ueditor.config.js 文件。
服務端部署
net 目錄是 ASP.NET 版的服務端程序,用來實現接收上傳的文件等功能。
本例中在網站中的位置是 /libs/ueditor/net/。如果改動了位置,那么在初始化 UE 的時候也應該配置 serverUrl 值。
這是一個完整的 VS 項目,可以單獨部署為一個網站。其中:
net/config.json 服務端配置文件
net/controller.ashx 文件上傳入口
net/App_Code/CrawlerHandler.cs 遠程抓圖動作
net/App_Code/ListFileManager.cs 文件管理動作
net/App_Code/UploadHandler.cs 上傳動作
該目錄不需要轉換為應用程序。
服務端配置
根據 config.json 中 *PathFormat 的默認配置,一般地,上傳的圖片會保存在 controller.ashx 文件所在目錄(即本例中的 /libs/ueditor/)的 upload 目錄中:
/libs/ueditor/upload/image/
原因是 UploadHandler.cs 中 Server.MapPath 的參數是由 *PathFormat 決定的。
以修改 config.json 中的 imagePathFormat 為例:
原值:"imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}"
改為:"imagePathFormat": "/upload/ueditor/image/{yyyy}{mm}{dd}/{time}{rand:6}"
以“/”開始的路徑在 Server.MapPath 時會定位到網站根目錄。
此處不能以“~/”開始,因為最終在客戶端顯示的圖片路徑是 imageUrlPrefix + imagePathFormat,若其中包含符號“~”就無法正確顯示。
在該配置文件中查找所有 PathFormat,按相同的規則修改。
說到客戶端的圖片路徑,我們只要將
原值:"imageUrlPrefix": "/ueditor/net/"
改為:"imageUrlPrefix": ""
即可返回客戶端正確的 URL。
當然也要同步修改 scrawlUrlPrefix、snapscreenUrlPrefix、catcherUrlPrefix、videoUrlPrefix、fileUrlPrefix。
特殊情況,在復制包含圖片的網頁內容的操作中,若圖片地址帶“?”等符號,會出現無法保存到磁盤的情況,需要修改以下代碼:
打開 CrawlerHandler.cs 文件,找到
ServerUrl = PathFormatter.Format(Path.GetFileName(this.SourceUrl), Config.GetString("catcherPathFormat"));
替換成:
ServerUrl = PathFormatter.Format(Path.GetFileName(SourceUrl.Contains("?") ? SourceUrl.Substring(0, SourceUrl.IndexOf("?")) : SourceUrl), Config.GetString("catcherPathFormat"));
如果你將圖片保存到第三方圖庫,那么 imageUrlPrefix 值設為相應的域名即可,如:
改為:"imageUrlPrefix": "//cdn.***.com"
然后在 UploadHandler.cs 文件(用於文件上傳)中找到
File.WriteAllBytes(localPath, uploadFileBytes);
在其下方插入上傳到第三方圖庫的代碼,以阿里雲 OSS 為例:
// 上傳到 OSS client.PutObject(bucketName, savePath.Substring(1), localPath);
在 CrawlerHandler.cs 文件(無程抓圖上傳)中找到
File.WriteAllBytes(savePath, bytes);
在其下方插入上傳到第三方圖庫的代碼,以阿里雲 OSS 為例:
// 上傳到 OSS client.PutObject(bucketName, ServerUrl.Substring(1), savePath);
最后有還有兩個以 UrlPrefix 結尾的參數名 imageManagerUrlPrefix 和 fileManagerUrlPrefix 分別是用來列出上傳目錄中的圖片和文件的,
對應的操作是在編輯器上的“多圖上傳”功能的“在線管理”,和“附件”功能的“在線附件”。
最終列出的圖片路徑是由 imageManagerUrlPrefix + imageManagerListPath + 圖片 URL 組成的,那么:
"imageManagerListPath": "/upload/ueditor/image",
"imageManagerUrlPrefix": "",
以及:
"fileManagerListPath": "/upload/ueditor/file",
"fileManagerUrlPrefix": "",
即可。
如果是上傳到第三方圖庫的,且圖庫上的文件與本地副本是一致的,那么將 imageManagerUrlPrefix 和 fileManagerUrlPrefix 設置為圖庫域名,
服務端仍然以 imageManagerListPath 指定的路徑來查找本地文件(非圖庫),但客戶端顯示圖庫的文件 URL。
因此,如果文件僅存放在圖庫上,本地沒有副本的情況就無法使用該功能了。
綜上,所有的 *UrlPrefix 應該設為一致。
另外記得配置不希望被遠程抓圖的域名,參數 catcherLocalDomain。
服務端授權
現在來判斷一下只有登錄用戶才允許上傳。
首先打開服務端的統一入口文件 controller.ashx,
繼承類“IHttpHandler”改為“IHttpHandler, System.Web.SessionState.IRequiresSessionState”,即同時繼承兩個類,以便可使用 Session,
找到“switch”,其上插入:
if (用戶未登錄) { throw new System.Exception("請登錄后再試"); }
即用戶已登錄或 action 為獲取 config 才進入 switch。然后,
else { action = new NotAllowedHandler(context); }
這里的 NotAllowedHandler 是參照 NotSupportedHandler 創建的,提示語 state 可以是“登錄后才能進行此操作。”
上傳目錄權限設置
上傳目錄(即本例中的 /upload/ueditor/ 目錄)應設置允許寫入和禁止執行。
基本用法
設置內容:
ue.setContent("Hello world.");
獲取內容:
var a = ue.getContent();
更多用法見官方文檔:http://fex.baidu.com/ueditor/#api-common
其它事宜
配置上傳附件的文件格式
找到文件:config.json,更改“上傳文件配置”的 fileAllowFiles 項,
同時在 Web 服務器上允許這些格式的文件可訪問權限。以 IIS 為例,在“MIME 類型”模塊中添加擴展名。
遇到從客戶端(......)中檢測到有潛在危險的 Request.Form 值。請參考此文
另外,對於不支持上傳 .webp 類型的圖片的問題,可以作以下修改:
config.json 中搜索“".bmp"”,替換為“".bmp", ".webp"”
IIS 中選中對應網站或直接選中服務器名,打開“MIME 類型”,添加,文件擴展名為“.webp”,MIME 類型為“image/webp”
最后,為了在內容展示頁面看到跟編輯器中相同的效果,請參照官方文檔引用 uParse
若有插入代碼,再引用:
<link href="/lib/ueditor/utf8-net/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet" /> <script src="/lib/ueditor/utf8-net/third-party/SyntaxHighlighter/shCore.js"></script>
其它插件雷同。
若對編輯器的尺寸有要求,在初始化時設置即可:
var ue = UE.getEditor('tb_content', { initialFrameWidth: '100%', initialFrameHeight: 320 });
3.解決無法插入動態地圖
(原文:https://www.cnblogs.com/CcPz/p/10012122.html)
(1)打開編輯器根目錄下面的ueditor.all.js文件,找到:
table.setAttribute("data-sort", cmd == "enablesort" ? "sortEnabled" : "sortDisabled")
在這句代碼下面加一行:
table.setAttribute("style", "border-collapse:collapse;");
(2)在ueditor.all.js文件中找到:
return '<table><tbody>' + html.join('') + '</tbody></table>'
改為:
return '<table style="border-collapse:collapse;"><tbody>' + html.join('') + '</tbody></table>'
(3)修改配置文件ueditor.config.js 找到:
whitList
下一行添加:
iframe: ['frameborder','border','marginwidth','marginheight','width','height','src','id'],//動態地圖
4.解決單獨調用上傳圖片失效問題
(原文:https://www.cnblogs.com/pcx105/p/7717028.html)
第一步, 引入文件
<script src="jquery.min.js" type="text/javascript" ></script> <script src="ueditor/ueditor.config.js" type="text/javascript" ></script> <script src="ueditor/ueditor.all.min.js" type="text/javascript" ></script>
第二步 html元素
<script type="text/plain" id="upload_ue"></script>
調用的頁面:
<input type="text" id="picture" name="cover" /><a href="javascript:void(0);" onclick="upImage();">上傳圖片</a> <input type="text" id="file" /><a href="javascript:void(0);" onclick="upFiles();">上傳文件</a>
第三步 編寫js代碼
<script type="text/javascript"> var _editor; $(function() { //重新實例化一個編輯器,防止在上面的editor編輯器中顯示上傳的圖片或者文件 _editor = UE.getEditor('upload_ue'); _editor.ready(function () { //設置編輯器不可用 _editor.setDisabled(); //隱藏編輯器,因為不會用到這個編輯器實例,所以要隱藏 _editor.hide(); //偵聽圖片上傳 _editor.addListener('beforeInsertImage', function (t, arg) { //將地址賦值給相應的input,只去第一張圖片的路徑 $("#picture").attr("value", arg[0].src); //圖片預覽 $("#preview").attr("src", arg[0].src); }) //偵聽文件上傳,取上傳文件列表中第一個上傳的文件的路徑 _editor.addListener('afterUpfile', function (t, arg) { $("#file").attr("value", _editor.options.filePath + arg[0].url); }) }); }); //彈出圖片上傳的對話框 function upImage() { var myImage = _editor.getDialog("insertimage"); myImage.open(); } //彈出文件上傳的對話框 function upFiles() { var myFiles = _editor.getDialog("attachment"); myFiles.open(); } </script>
第四步 最重要的一步, 修改bug
打開image插件的image.js 108行
editor.execCommand('insertimage', list);
代碼之前加入
editor.fireEvent('beforeinsertimage', list);
然后問題搞定
第五步,如果第四步不行,請參考這一步
在ueditor文件夾中找到文件dialogs\attachment\attachment.js中找到代碼
editor.execCommand('insertfile', list);
在這行代碼前添加
editor.fireEvent('afterUpfile', list);
然后問題搞定