2012-07-26 21 views
3

合併文件和數據庫上傳時,「純ASP」文件上傳腳本我有是給我一個錯誤錯誤的ASP腳本

Microsoft VBScript runtime error '800a0005' 

Invalid procedure call or argument: 'MidB' 

在這條線103(行工作包括文件clsUpload。 ASP):

mstrDelimiter = MidB(mbinData, 1, InStrB(1, mbinData, CRLF) - 1) 

時,我結合了文件上傳和在同一頁上的數據庫上傳腳本。 我認爲這可能與該類的實例有關,並且我已經試過讓整個腳本建立的類,而不是將其設置爲「無」並重新建立它,但這沒有任何區別。有任何想法嗎?

上傳腳本可以正常工作,只要它們位於不同的頁面上,由頁面上的前兩個表單單獨發佈(如下)。然而,第三種形式並不成功。 非常感謝!

(代碼下面全)

注: 「clsUpload.asp」 和 「clsField.asp」 文件過大後。 他們,但是可以在這裏找到: http://www.codeguru.com/dbfiles/get_file/upload_files_without_com_v2.zip?id=19297&lbl=UPLOAD_FILES_WITHOUT_COM_V2_ZIP

窗體頁下圖:

<H2>To Database</H2> 
<FORM name="a" id="a" method="post" encType="multipart/form-data" action="ToDatabase.asp"> 
<INPUT type="File" name="File1"> 
<INPUT name="Submit" type="submit" value="Upload"> 
</FORM> 

<H2>To File System</H2> 
<FORM name="b" id="b" method="post" encType="multipart/form-data" action="ToFileSystem.asp"> 
<INPUT type="File" name="File1"> 
<INPUT name="Submit" type="submit" value="Upload"> 
</FORM> 


<H2>To Both Database and File System</H2> 
<FORM name="c" id="c" method="post" encType="multipart/form-data" action="ToDatabaseAndFileSystem.asp"> 
<INPUT type="File" name="File1"> 
<INPUT name="Submit" type="submit" value="Upload"> 
</FORM> 


<HR> 
<P> 
This script provided to you by <A href="http://www.lewismoten.com">Lewis Moten</A>. 
Please help me out and link back to my site from your own website, news groups, 
postings on other websites, email, etc. 
</P> 

<p>Database file list below 
</p> 
<ol> 
<% 
Dim objUpload 
Dim strFileName 
Dim objConn 
Dim objRs 
Dim lngFileID 


Set objConn = Server.CreateObject("ADODB.Connection") 
Set objRs = Server.CreateObject("ADODB.Recordset") 
objConn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" &  Server.MapPath("Files.mdb") 
objRs.Open "SELECT * FROM Files", objConn, 2, 2 

If Not (objRs.EOF And objRs.BOF) Then 
objRs.MoveFirst 
Do Until objRs.EOF = True 
strFileName=objRs.Fields("FileName").Value 
lngFileID = objRs.Fields("FileID").Value 
%> 
<li><A href="DataFile.asp?FileID=<%=lngFileID%>"><%=strFileName%></A></li> 
<br /> 
<% 
    objRs.MoveNext 
Loop 
Else 
response.write("MsgBox """ & "There are not records in the recordset." & """<"&"/script>") 
End If 



objRs.Close 
Set objRs = Nothing 
Set objConn = Nothing 
Set objUpload = Nothing 
%> 
</ol> 

表單處理頁面(組合)

<!--#INCLUDE FILE="clsUpload.asp"--> 
<% 
Dim objUpload 
Dim strFileName 
Dim objConn 
Dim objRs 
Dim lngFileID 
Dim strPath 


'///database upload section - begin/// 
' Instantiate Upload Class 
Set objUpload = New clsUpload 

' Grab the file name 
strFileName = objUpload.Fields("File1").FileName 
strLength = objUpload.Fields("File1").Length 


Set objConn = Server.CreateObject("ADODB.Connection") 
Set objRs = Server.CreateObject("ADODB.Recordset") 

' Sometimes I personally have errors with one method on different servers, but the  other works. 
objConn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("Files.mdb") 
'objConn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Files.mdb") 

'objRs.Open "Files", objConn, 3, 3 
objRs.Open "Files", objConn, 2, 2 

objRs.AddNew 

objRs.Fields("FileName").Value = objUpload.Fields("File1").FileName 
objRs.Fields("FileSize").Value = objUpload.Fields("File1").Length 
objRs.Fields("ContentType").Value = objUpload.Fields("File1").ContentType 
objRs.Fields("BinaryData").AppendChunk objUpload("File1").BLOB & ChrB(0) 

objRs.Update 

objRs.Close 

'objRs.Open "SELECT Max(FileID) AS ID FROM Files", objConn, 3, 3 
objRs.Open "SELECT Max(FileID) AS ID FROM Files", objConn, 2, 2 
lngFileID = objRs.Fields("ID").Value 
objRs.Close 


Set objRs = Nothing 
Set objConn = Nothing 
Set objUpload = Nothing 
%> 
File has been saved in database.<BR> 
<BR> 
View this file:<BR> 
<BR> 
<A href="DataFile.asp?FileID=<%=lngFileID%>"><%=strFileName%></A> 

'///database upload section - end/// 






'///file server upload section - begin/// 
<% 
' Instantiate Upload Class 
Set objUpload = New clsUpload 

' Grab the file name 
strFileName = objUpload.Fields("File1").FileName 
' Compile path to save file to 
strPath = Server.MapPath("Uploads") & "\" & strFileName 
' Save the binary data to the file system 
objUpload("File1").SaveAs strPath 




' Release upload object from memory 
Set objUpload = Nothing 

MyVariable = strFileName 
Response.Write "<script type='text/javascript'>alert('" & MyVariable & "');</script>" 
%> 
File has been saved in file system.<BR> 
<BR> 
View this file:<BR> 
<BR> 
<A href="Uploads\<%=strFileName%>">Uploads\<%=strFileName%></A> 

<!-- /////////////////////////////////////////////////// --> 


'///file server upload section - begin/// 




<ol> 
<% 
Set objConn = Server.CreateObject("ADODB.Connection") 
Set objRs = Server.CreateObject("ADODB.Recordset") 
objConn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("Files.mdb") 
objRs.Open "SELECT * FROM Files", objConn, 2, 2 

If Not (objRs.EOF And objRs.BOF) Then 
objRs.MoveFirst 
Do Until objRs.EOF = True 
strFileName=objRs.Fields("FileName").Value 
lngFileID = objRs.Fields("FileID").Value%> 
<li><A href="DataFile.asp?FileID=<%=lngFileID%>"><%=strFileName%></A></li> 
<br /> 
<% 
    objRs.MoveNext 
Loop 
Else 
MsgBox "There are not records in the recordset." 
End If 



objRs.Close 
Set objRs = Nothing 
Set objConn = Nothing 
Set objUpload = Nothing 
%> 
</ol> 
+0

「表單處理頁面(組合)」的「ToDatabaseAndFileSystem.asp」文件的代碼? – 2012-07-29 07:15:00

+0

是的,這是正確的。謝謝。 – buck1112 2012-07-31 17:37:59

回答

0

此行失敗:

mstrDelimiter = MidB(mbinData, 1, InStrB(1, mbinData, CRLF) - 1) 

可能原因:

  • mbinData是零長度
  • mbinData不包含CRLF
  • mbinData與CRLF開始
  • 標識符CRLF不包含所期望的字節序列

發現其中的上面是真的在你的情況下,你會發現問題。

1

問題在於clsField.vbs文件

如果路徑中不包含「\」,那麼文件名域保持空白:

我建議增加一個else條件,如if語句所以:

' Parse File Name 
    If Not InStrRev(pstrPath, "\") = 0 Then 
     FileName = Mid(pstrPath, InStrRev(pstrPath, "\") + 1) 
    else 
     FileName = pstrPath 
    End If 
+1

我也認爲有一個更新版本的clsUpload類,這是不是一個問題或是固定的:http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8525&lngWId= 4#zip – 2012-07-27 09:30:32

+1

你的'If'聲明真的有必要嗎?由於'FileName = Mid(pstrPath,1)'等價於'FileName = pstrPath',所以對我來說似乎很囉嗦。 – AnthonyWJones 2012-07-27 11:16:37

+0

Yip,我同意你可以用下面的賦值替換整個if塊:FileName = Mid(pstrPath,InStrRev(pstrPath,「\」)+ 1) – 2012-07-27 12:27:25