3

使用している「純粋な ASP」ファイル アップロード スクリプトでエラーが発生する

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument: 'MidB' 

この行 (インクルード ファイル clsUpload.asp の 103 行目):

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

同じページでファイル アップロード スクリプトとデータベース アップロード スクリプトを組み合わせると、クラスのインスタンス化に関係があるのではないかと考え、クラスを「何もない」に設定して再確立するのではなく、スクリプト全体でクラスを確立したままにしてみましたが、違いはありませんでした。何か案は?

アップロード スクリプトは、ページの最初の 2 つのフォーム (以下) によって別々に投稿された別々のページにある限り、正常に機能します。ただし、3 番目の形式は成功しません。とても有難い!

(以下のコード全文)

注: 「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>
4

2 に答える 2

2

問題は clsField.vbs ファイルにあります

パスに「\」が含まれていない場合、FileName フィールドは空白のままになります。

次のように if ステートメントに else 条件を追加することをお勧めします。

    ' Parse File Name
    If Not InStrRev(pstrPath, "\") = 0 Then
        FileName = Mid(pstrPath, InStrRev(pstrPath, "\") + 1)
    else
        FileName = pstrPath
    End If
于 2012-07-27T09:29:06.623 に答える
0

この行は失敗します:

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

考えられる理由:

  • mbinData の長さはゼロです
  • mbinData に CRLF が含まれていません
  • mbinData は CRLF で始まります
  • 識別子 CRLF に予期されるバイト シーケンスが含まれていません

上記のどれがあなたのケースに当てはまるかを発見すると、問題が見つかります.

于 2012-07-27T08:58:09.970 に答える