不可否認,百度UEditor是一款非常優秀的web編輯器,近期我們在開發一套軟件項目過程中,就使用到這款編輯器,待項本地測試完全沒問題后,將文件發布到服務器,卻發現,該編輯器的上傳圖片功能不能使用,但系統默認的上傳功能是沒問題,這說明服務器該開的權限都開了。
我們在網上搜了一下各種各樣的解決方案,什么權限沒開等各式各樣說法,這些可能是針對該編輯器歷史版本解決方案,但對于1.4.3版本來說,完全沒有任何作用。
網上始終找不到任何有效解決方案,項目我們已經全部結束,只有這個編輯器小BUG,也不愿意把這么優秀的編輯器換掉,所以我們就硬著頭皮來解決這個骨頭,解決好之后,后面每個軟件開發項目都可以使用到這么優秀的編輯器,何樂不為呢?
下面上海軟件開發公司為你重點講述下這個BUG的原因及解決方案?
歸根結底還是路徑沒弄懂所導致的,IIS服務器中匿名賬號可以磁盤上的非用戶目錄,這就是為什么本地測試成功,傳到服務器或者空間不能用的原因了。
找到原因后,我們針對這個問題進行解決,打開Uploader.Class.asp找到CheckOrCreatePath函數,路徑不需要我們說了吧
將
savePath = Server.MapPath(rsFilePath)
CheckOrCreatePath( GetDirectoryName(savePath) )
stream.SaveToFile savePath
修改成:
savePath = rsFilePath
CheckOrCreatePath( GetDirectoryName(savePath) )
stream.SaveToFile Server.MapPath(savePath)
修改CheckOrCreatePath函數:
原函數:
Private Function CheckOrCreatePath( ByVal path )
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Dim parts
parts = Split( path, "\" )
path = ""
For Each part in parts
path = path + part + "\"
If fs.FolderExists( path ) = False Then
fs.CreateFolder( path )
End If
Next
End Function
修改成:
Private Function CheckOrCreatePath( ByVal path )
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Dim parts,root
root = "/"
parts = Split( path, "/" )
path = ""
For Each part in parts
if trim(part) <> "" then
path = path + part + "/"
If fs.FolderExists( Server.MapPath(root & path) ) = False Then
fs.CreateFolder( Server.MapPath(root & path) )
End If
end if
Next
End Function
將這代碼COPY進去,絕對沒有問題,我們已經將這更改的代碼發布到我們實際軟件開發項目中了,如果不把這路徑問題處理掉的話,那么你上傳圖片圖片永遠只能在本地運行,不能在服務器中運行了。