最近在一個
網站建設項目中內容編輯應用了百度的UEditor編輯器,項目完成后發布到遠程服務器后卻發現原本在本地測試一切都OK,偏偏發布到服務器后就不能上傳圖片了,單圖上傳和多圖上傳都不能用,但是網站自帶的上傳功能卻是可以用的,那么可以證明一點的是,服務器肯定是有寫入權限的。
湖南移動時代網上搜了一下,發現很多同行也遇到了同樣的問題,其中有些人遇到的可能確實是服務器沒有寫入權限,但仍有很多人并不是這個問題,所以很多搜出來的答案都說什么“沒有寫入權限”,完全是坑爹,哪個空間商賣的空間是沒有寫入權限的? 在給出解決方案前,為了保險起見,咱們還是先自行檢測一下,確定是否沒有寫入權限,當然此檢查只是限于使用獨立服務器的用戶,如果您是購買的虛擬主機那完全不用懷疑空間的寫入權限。如果你上傳的網站里面有獨立上傳功能的隨便上傳一張圖,如果上傳成功,則表示服務器是有寫入權限的,如果不能上傳,那就說明確實是服務器沒有寫入權限,才導致不能上傳的。當然ueditor其他版本的也是這樣測試。當然也有很多人說是配置問題,但是很明顯很多人本地都是測試成功的,只是發布到服務器不能用,說明上傳配置是沒問題的,所以答案都不靠邊,基本都是騙經驗的。
下面
長沙營銷型網站建設湖南移動時代將重點講述UEditor 1.4.3 ASP版在空間或服務器上不能上傳文件的真正原因。由于網上始終找不到真正的解決方案,再加上項目已經做完了,不好臨時換編輯器,實在沒辦法,只能硬著頭皮自己解決,終于發現了UEditor坑爹的BUG,這次百度技術員還真是腦洞大開啊,連網站基本的路徑都沒搞懂?IIS匿名賬號居然訪問磁盤上的非用戶目錄,這就是為什么本地測試成功,傳到服務器或者空間不能用的原因了,我們空間或服務器給定的賬號的訪問權限僅限于當前站點的根目錄及其子子目錄。而UEditor卻嘗試訪問訪問根目錄的上級。
在Uploader.Class.asp文件中,有一個CheckOrCreatePath函數,這個就是導致文件無法上傳的罪魁禍首。
具體文件位置:ueditor/asp/Uploader.Class.asp
解決方法如下:
首先找到這三句代碼:
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
其實問題就是原代碼中savePath作為參數傳給CheckOrCreatePath處理時,是個絕對的物理路徑,而在CheckOrCreatePath函數中會對路徑地址拆分判斷路徑中的目錄是否存在,如果不存在則新建存儲目錄,想法沒錯,只是做法不對,所以將savePath改成相對路徑,然后再將目錄地址定位到站點根目錄root = "/",再通過Server.MapPath獲取到目錄的真實路徑,此時獲取到的目錄路徑就不會涉及到根目錄的上級目錄。湖南移動時代提醒凡用UEditor 1.4.3 ASP版這個必須得改的,不然真就只能在本地用用了。
本文由移動時代技術原創,尊重他人勞動成果,轉載請注明出處。
http://www.secondwindhealing.com/ueditor/