在ASP.NET Core使用百度線上編輯器UEditor

高洛峰
發布: 2016-11-30 14:21:44
原創
1796 人瀏覽過

在ASP.NET Core中使用百度線上編輯器UEditor

0x00 起因

最近需要一個線上編輯器,之前聽人說過百度的UEditor不錯,去官網下了一個。不過服務端只有ASP.NET版的,如果是為了能盡快使用,只要把ASP.NET版的服務端當作應用部署在IIS上就可以立即使用了。不過我的需求並不急,所以把ASP.NET移植到了ASP.NET Core。整個過程很簡單,只是重新引用了一些包,修改了幾個程式碼,另外就是把Controller中比較長的一個switch語句塊重構為了字典,根據url中的action參數從字典中找出並調用相應的Action處理,這樣的好處就是如果要擴充action支援的操作不需要修改原始碼,只要擴充字典就可以,對擴充開放,對修改關閉。最後把服務端功能打成了nuget套件UEditorNetCore,方便使用。這篇部落格主要就介紹下如何使用UEditorNetCore快速實現UEditor服務端,也可以直接使用原始碼中的範例,希望對有這方面需求的園友有所幫助。

0x01 整體設計

在ASP.NET Core使用百度線上編輯器UEditor

當接收到action後,UEditorService會從UEditorActionCollection中找到這個action對應的方法並調用,同時傳入HttpContext參數。這些方法呼叫基底層的服務XxxxHandler完成功能,並且把回傳內容透過HttpContext.Response.WriteAsync()方法寫入。如果要擴充對action的支持,可以擴充UEditorActionCollection,具體方法後面有介紹。

0x02 如何使用UEditorNetCore

1.安裝UEditorNetCore

Install-Package UEditorNetCore

2.在Startup.cs的ConfigUEServices

public void ConfigureServices(IServiceCollection services)
{
  //第一个参数为配置文件路径,默认为项目目录下config.json
  //第二个参数为是否缓存配置文件,默认false
  services.AddUEditorService()
  services.AddMvc();
}
登入後複製

4.修改前端設定檔ueditor.config.js

serverUrl需要參考第3步驟Controller中設定的路由,依照上方步驟3中的配置,需要以下設定:

serverUrl:"/api/UEditor"


這樣設定後當前端要取得服務端UEditor設定時就會存取/api/UEditor?action=config。

5.修改服務端設定config.json

上傳類別的操作需要設定對應的PathFormat和Prefix。範例部署在web根目錄,因此Prefix都設定為"/"。使用時要依具體情況配置。 例如範例中圖片上傳的配置如下:

[Route("api/[controller]")] //配置路由
public class UEditorController : Controller
{
    private UEditorService ue;
    public UEditorController(UEditorService ue)
    {
        this.ue = ue;
    }

    public void Do()
    {
        ue.DoAction(HttpContext);
    }
}
登入後複製

關於PathFormat的詳細配置可參考官方文件。

6.新增javascript參考

"imageUrlPrefix": "/", /* 图片访问路径前缀 */
"imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}",
登入後複製

0x03 擴充action

UEditor前端和後端互動主要透過在url中給予不同的action參數實現的,例如/api/UEditor?action=config會從服務端取得UEditor配置資訊。 UEditorNetCore目前支援的有8種action:

config 取得服務端設定資訊

uploadimage 上傳圖片

uploadscrawl 上傳塗鴉
uploadvideo 上傳影片
uploadfile 上傳檔案
listimage 多點上傳圖片

如果以上action无法满足需求,可以方便的增加、覆盖、移除action。

增加action

public void ConfigureServices(IServiceCollection services)
{
    services.AddUEditorService()
        .Add("test", context =>
        {
            context.Response.WriteAsync("from test action");
        })
        .Add("test2", context =>
        {
            context.Response.WriteAsync("from test2 action");
        });
    services.AddMvc();
}
登入後複製

以上代码增加了名字为test和test2两个action,作为示例仅仅返回了字符串。当访问/api/UEditor?action=test时会返回"from test action"。在扩展action时可以使用Config获取服务端配置,也可以使用已有的Handlers,具体可以参考源代码。

覆盖现有action

上面的Add方法除了添加新action外还可以覆盖现有action。当现有的action可能不符合你的要求,可以Add一个同名的action覆盖现有的。

移除action

如果要移除某个action,可以使用Remove方法。

public void ConfigureServices(IServiceCollection services)
{
    services.AddUEditorService()
        .Remove("uploadvideo");
    services.AddMvc();
}
登入後複製

以上代码中的Remove("uploadvideo")方法移除了名为uploadvideo的action。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板