使用UMeditor富文本編輯器上傳圖片
注:本文系作者原創,但可隨意轉載。
比如,文檔中js的配置文件給了兩個節點
{ "imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", "imageUrlPrefix": "/myapp/ueditor/net/", } 但是實際下載下來的UMeditor代碼的js配置文件中給的節點是,
//圖片上傳配置區
,imageUrl:URL+"net/imageUp.ashx" //圖片上傳提交地址
,imagePath:URL + "net/" //圖片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
,imageFieldName:"upfile" //圖片數據的key,若此處修改,需要在后臺對應文件修改對應參數
問題一、
下載后,直接引用Umeditor,目錄結構大致如下圖,在ASP.NET MVC4項目中,把整個umeditor文件夾放在Scripts下。編輯博客的頁面已經寫好了,啟動程序,進入編輯頁面點擊上傳圖片,進行上傳,報錯。
說明: 在編譯向該請求提供服務所需資源的過程中出現錯誤。請檢查下列特定錯誤詳細信息并適當地修改源代碼。
編譯器錯誤消息: CS0433: 類型“Lyosaki.Site.Uploader”同時存在于“c:\Users\LiuYu\AppData\Local\Temp \Temporary ASP.NET Files\root\0d2fa058\84067035\App_Web_uploader.cs.c95a9a5.dyxu9rbj.dll”和 “c:\Users\LiuYu\AppData\Local\Temp\Temporary ASP.NET Files\root\0d2fa058\84067035\assembly\dl3\3147e142\84a16ccb_7a2ad101 \Lyosaki.Site.DLL”中
解決方案:因為在imageUp.ashx文件頭部有一句 <%@ Assembly Src="Uploader.cs" %>, 但給出的是相對路徑,系統在默認路徑下找到了多個程序集導致編譯失敗。這里直接把這一句去掉,另外 Uploader.cs沒有命名空間,這里加上命名空間Lyosaki.Site,然后直接在imageUp.ashx里邊using Lyosaki.Site;即可。
問題二、
在不改變現有目錄結構和默認圖片上傳路徑的情況下,圖片上傳地址形如:~/Scripts/umeditor/net/upload/yyyy-MM-dd/Guid.jpg。
所以,我想優化文件組織結構,改變圖片存儲位置到~/Upload/yyyy-MM-dd/Guid.jpg。順便把ashx和cs文件拿出來,放在Scripts文件夾下實在變扭。
這里調試了半天,因為圖片上傳路徑的拼接邏輯實在是混亂,在c#兩個文件里有配置,js里也有相關配置,然后c#上傳完后還要回調js又傳了個路徑回去。。。
解決方案:在根目錄下新建Ashx文件夾,把兩個ashx文件拷過去。在根目錄新建Helper文件夾,把Uploader.cs拷貝進去。
在imageUp文件ProcessRequest方法里修改pathbase為,
//上傳配置string pathbase = "/Upload/";。
代表要上傳文件到 根目錄的Upload文件夾下,但是不能寫成"~/Upload",因為這里路徑后面會回調到js,js無法解析~。
在umeditor.config.js文件中,將圖片上傳配置修改為:
//圖片上傳配置區
, imageUrl: "/Ashx/imageUp.ashx" //圖片上傳提交地址
, imagePath: "" //圖片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
, imageFieldName: "upfile" //圖片數據的key,若此處修改,需要在后臺對應文件修改對應參數
問題三、
點擊圖片上傳后,彈窗如圖,由于頁面較長,可以上下滾動,但此時,整個“圖片”彈窗是Fixed的,會隨頁面滾動。。。但"本地上傳","網絡圖片"這兩個pannel,以及中間的小電腦圖片和下面那一行文字,確是relative的,滾動到下面,他們不會跟著滾動。。。
導致有幾次我滾動到最下面然后點圖片上傳,卻看不到中間的內容,還以為是網絡問題沒加載出來。。。
解決方案:
在umeditor.css里面加入下面幾行樣式即可。
.edui-tab-pane {
position: fixed !important;
}
.edui-image-dragTip, .edui-image-upload1 {
left: 50% !important;
position: fixed !important;
}
目前暫時還沒有遇到其他問題,但打算在其他地方復用一下它的上傳彈窗和后臺邏輯,先研究研究能否實現。