這幾天在運用一個asp程序,它引用了xheditor編輯器,引用了無懼上傳類 V2.2 xheditor特別修改版的上傳程序upload.asp,在本地測試上傳圖片和文件都能成功,問題出在上傳到服務器後圖片上傳不成功。
這裡的不成功有幾種,我是第2種,我分別說明一下:
第1種:出現文件根本無法上傳的情況,這是由於無懼上傳類v2.2的一個BUG
使用了“無懼上傳類 v2.2”,在運行中出現這樣一個問題,上傳文件時提示上傳成功,但文件實際上並沒有傳上去。然而,如果使用“無懼上傳類 v1.2”的話就沒有這個問題。經過對比代碼,找到了問題的所在,我認為這應該是“無懼上傳類 v2.2”的一個BUG。
在UpFile_Class類的SaveToFileEx成員函數中有這樣兩行:
tmpPath=Split(Path,”.”)(0)
FileExt=GetFileExt(Path)
後面判斷若沒有問題可以上傳,則執行這樣一行將文件寫到本機中:
oFileStream.SaveToFile tmpPath & “.” & FileExt,2
Path是上傳的文件在本機的全路徑。可以看出,作者的本意是tmpPath的值為文件本機全路徑去掉擴展名和連接擴展名的“.”,這樣做主要是基於安全上的考慮。然而,實際使用時路徑中有一個“.”,如“D:/web/aaa.com/bbb/”,這樣,tmpPath的值就是“D:/web/aaa”,這明顯是錯誤的。出現了這樣的問題依然提示上傳成功的原因是SaveToFileEx函數的開頭有一個“On Error Resume Next”。
這樣,我們對SaveToFileEx函數進行一些修改,讓其先截取路徑和文件名,存放於onlyPath和onlyFileName中,再對onlyFileName進行擴展名截取。將tmpPath=Split(Path,”.”)(0)修改為以下代碼:
for i=len(Path) to 1 step -1
if mid(Path, i, 1) = “/” or mid(Path, i, 1) = “/” then exit for
next
onlyPath = left(Path, i)
onlyFileName = right(Path, len(Path) – i)
tmpFileName = Split(onlyFileName,”.”)(0)
然後將寫文件的代碼改成這樣:
oFileStream.SaveToFile OnlyPath & tmpFileName & “.” & FileExt,2
進行了這樣的修改,再運行就沒有問題了。這個是文件保存路徑不對造成的。
第2種:文件上傳成功到指定的目錄,但無法加載到ubb編輯框裡,或者加載到ubb編輯裡是個不一樣的文件名。
若把upload.asp文件開頭的on error resume next去掉,上傳文件的過程會出如下錯誤:
/upload.asp,行300說是無權限 但是明明文件可以上傳啊?300行代碼是:
Function moveFile(oldfile,newfile)
dim fs
Set fs=Server.CreateObject(“Scri”&”pting.File”&”Sys”&”temObject”)
fs.movefile Server.MapPath(oldfile),Server.MapPath(newfile) (第300行)
Set fs=Nothing
End Function
本地測試文件上傳成功,服務器也上傳到了指定目錄,就是無法這個moveFile函數,這是為什麼呢?
有個原因:會不會是服務器上目錄結構存在差異,如果跟蹤一下Server.MapPath(newfile) ,看這個是否正確?
我測試過,找不出問題,只好不要這個函數,而是直接把上傳後的文件名oldfile直接賦給newfile
把原來的代碼:
‘生成隨機文件名並改名
Randomize timer
filename=DateFormat(now,”yyyymmddhhnnss”)+cstr(cint(9999*Rnd))+”.”+extension
target=attach_dir+filename
moveFile attach_dir+tmpfile,target
if immediate=”1″ then target=”!”+target
target=jsonString(target)
改為:
‘生成隨機文件名並改名/左岸注:本地測試很成功,上傳到服務器地無法執行moveFile,只好把這兩個值對等了/
tmpfile=attach_dir+tmpfile
target=tmpfile
if immediate=”1″ then target=”!”+target
target=jsonString(target)
這當然是壞辦法,卻也只能這麼辦了暫時,因為結果這樣圖片就上傳成功了。