Question to say "I can!"

asp程序:本地測試正常,服務器上傳文件失敗

2012-08-20

這幾天在運用一個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)

這當然是壞辦法,卻也只能這么辦了暫時,因為結果這樣圖片就上傳成功了。

作者:admin | Categories:設計問題 | Tags:

一條評論

  1. Fox說道:

    這配色看久了,容易眼不舒服啊

發表評論

電子郵件地址不會被公開。 必填項已用*標注

*

澳洲f1赛车b盘开奖套路 韩国快乐8app 股票价格指数期货 贵州快三综合走势图 易配资平台 河北快三app 广东11选5合法吗 快乐双彩开奖结果查询牛材网 龙8国际pt老虎机官网 破解11选5的密码出号 股票分析师为什么不自己炒股还乐于助人 天津快乐10分助手 贵州快三开奖教程 大盘a股走势图 一定牛福建快3开奖 目前最好的炒股软件 互联网理财平台安全性排名2019