程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> asp程序:本地測試正常,服務器上傳文件失敗

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

編輯:關於ASP編程
 

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

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

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved