Forms 如何使用FreeASPUpload脚本插入记录和上载文件
我想插入记录和上传文件在同一时间,现在我使用的脚本。当我提交表单时,它会返回此错误Forms 如何使用FreeASPUpload脚本插入记录和上载文件,forms,file-upload,asp-classic,upload,httprequest,Forms,File Upload,Asp Classic,Upload,Httprequest,我想插入记录和上传文件在同一时间,现在我使用的脚本。当我提交表单时,它会返回此错误 Cannot use the generic Request collection after calling BinaryRead 这是我的页面的完整源代码 <% option explicit Response.Expires = -1 Server.ScriptTimeout = 600 Session.CodePage = 65001 %> <!-- #include file=
Cannot use the generic Request collection after calling BinaryRead
这是我的页面的完整源代码
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
Session.CodePage = 65001
%>
<!-- #include file="UploadClass.asp" -->
<%
Dim uploadsDirVar
uploadsDirVar = server.MapPath("Files_Uploaded")
function OutputForm()
%>
<form name="frmSend" method="POST" enctype="multipart/form-data" accept-charset="utf-8" action="form.asp" onSubmit="return onSubmitForm();">
<input type="hidden" name="ApplicationForm" value="Insert" />
Name: <input type="text" name="name_insert" value="" size="30" />
<B>File names:</B><br>
File 1: <input name="attach1" type="file" size=35><br>
<br>
<input style="margin-top:4" type="submit" value="Submit">
</form>
<%
end function
function TestEnvironment()
Dim fso, fileName, testFile, streamTest
TestEnvironment = ""
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(uploadsDirVar) then
TestEnvironment = "<B>Folder " & uploadsDirVar & " does not exist.</B><br>The value of your uploadsDirVar is incorrect. Open uploadTester.asp in an editor and change the value of uploadsDirVar to the pathname of a directory with write permissions."
exit function
end if
fileName = uploadsDirVar & "\test.txt"
on error resume next
Set testFile = fso.CreateTextFile(fileName, true)
If Err.Number<>0 then
TestEnvironment = "<B>Folder " & uploadsDirVar & " does not have write permissions.</B><br>The value of your uploadsDirVar is incorrect. Open uploadTester.asp in an editor and change the value of uploadsDirVar to the pathname of a directory with write permissions."
exit function
end if
Err.Clear
testFile.Close
fso.DeleteFile(fileName)
If Err.Number<>0 then
TestEnvironment = "<B>Folder " & uploadsDirVar & " does not have delete permissions</B>, although it does have write permissions.<br>Change the permissions for IUSR_<I>computername</I> on this folder."
exit function
end if
Err.Clear
Set streamTest = Server.CreateObject("ADODB.Stream")
If Err.Number<>0 then
TestEnvironment = "<B>The ADODB object <I>Stream</I> is not available in your server.</B><br>Check the Requirements page for information about upgrading your ADODB libraries."
exit function
end if
Set streamTest = Nothing
end function
function SaveFiles
Dim Upload, fileName, fileSize, ks, i, fileKey
Set Upload = New FreeASPUpload
Upload.Save(uploadsDirVar)
' If something fails inside the script, but the exception is handled
If Err.Number<>0 then Exit function
SaveFiles = ""
ks = Upload.UploadedFiles.keys
if (UBound(ks) <> -1) then
SaveFiles = "<B>Files uploaded:</B> "
for each fileKey in Upload.UploadedFiles.keys
SaveFiles = SaveFiles & Upload.UploadedFiles(fileKey).FileName & " (" & Upload.UploadedFiles(fileKey).Length & "B) "
next
else
SaveFiles = "No file selected for upload or the file name specified in the upload form does not correspond to a valid file in the system."
end if
SaveFiles = SaveFiles & "<br>Enter a number = " & Upload.Form("enter_a_number") & "<br>"
SaveFiles = SaveFiles & "Checkbox values = " & Upload.Form("checkbox_values") & "<br>"
SaveFiles = SaveFiles & "List values = " & Upload.Form("list_values") & "<br>"
SaveFiles = SaveFiles & "Text area = " & Upload.Form("t_area") & "<br>"
end function
%>
<HTML>
<HEAD>
<TITLE>Test Free ASP Upload 2.0</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
BODY {background-color: white;font-family:arial; font-size:12}
</style>
<script>
function onSubmitForm() {
var formDOMObj = document.frmSend;
if (formDOMObj.attach1.value == "")
alert("Please press the Browse button and pick a file.")
else
return true;
return false;
}
</script>
</HEAD>
<BODY>
<br><br>
<div style="border-bottom: #A91905 2px solid;font-size:16">Upload files to your server</div>
<%
Dim diagnostics
if Request.ServerVariables("REQUEST_METHOD") <> "POST" then
diagnostics = TestEnvironment()
if diagnostics<>"" then
response.write "<div style=""margin-left:20; margin-top:30; margin-right:30; margin-bottom:30;"">"
response.write diagnostics
response.write "<p>After you correct this problem, reload the page."
response.write "</div>"
else
response.write "<div style=""margin-left:150"">"
OutputForm()
response.write "</div>"
end if
else
response.write "<div style=""margin-left:150"">"
OutputForm()
response.write SaveFiles()
response.write "<br><br></div>"
end if
%>
</BODY>
</HTML>
<!-- #include file="ADOVBS.inc" -->
<%
'=======================================================================================
' CONNECT DATABASE
'=======================================================================================
Dim objConn, objRs
Set objConn = CreateObject("ADODB.Connection")
Set objRs = CreateObject("ADODB.Recordset")
objConn.open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.MapPath("db/Job_database.mdb") &";Mode=ReadWrite|Share Deny None;Persist Security Info=False"
If Request("ApplicationForm") = "Insert" Then
Set InsCom=Server.CreateObject("ADODB.Command")
InsCom.ActiveConnection=objConn
InsName = Trim(request("name_insert"))
InsName = replace(InsName,"'","''")
InsCom.CommandText = "Insert into applications(aname)Values(?)"
InsCom.Parameters.Append InsCom.CreateParameter("@name_insert", adVarChar, adParamInput, 255, InsName)
InsCom.Execute
End If
%>
对此
If Upload.Form("ApplicationForm") = "Insert" Then
但它也会返回一个错误,即:变量未定义:'Upload'
如果我更改请求方法,它只上载文件而不插入记录
If Request.QueryString("ApplicationForm") = "Insert" Then
我所理解的是,我的insert查询位于错误的位置
请帮我解决这个问题。。谢谢我没有太多使用AspFreeUpload,所以我在这里猜测一下 使用请求对象似乎不是一个选项,因此您不得不使用Upload.Form。正如您的代码所示,上载对象仅在SaveFiles函数的上下文中定义和设置 尝试将数据库插入代码移动到SaveFiles函数中。这意味着从生产线上切断一切
Dim objConn, objRs
到
并将其粘贴到“结束函数”之前
您可能还需要将include adovbs.inc指令移动到调用函数之前的某个位置。最符合逻辑的地方应该是在另一个include directive=for uploadclass.asp的正下方的一行。非常感谢John,我已经按照您的建议移动了所有代码。但是,
ADOVBS.INC
有一个问题,因为我将文件移到了UploadClass.asp
下面,但是声明它们显式地完成了任务,所以无法识别此文件中定义的变量。再次感谢你们,现在我的问题解决了:)很高兴你们到了那个里。我想您也可以在函数本身中包含adovbs.inc,但是声明您需要的唯一变量是一个更简洁的解决方案。我几乎从未使用过adovbs.inc。在global.asa
文件中使用
而不是adovbs.asp
,以使所有asp页面都可以访问ADO常量。2.无法使用Request.Form
的原因是,一旦调用Request.BinaryRead()
请求集合就会失效,这就是为什么AspFreeUpload提供了自己的Scripting.Dictionary
来访问这些值。@Lankymart-嗯,OP使用的是adovbs.inc,所以我坚持使用它。就我个人而言,我倾向于使用类似于rs.opensql,conn,0,1的东西,因此我不需要Constants,因为发现元数据Typelib标记后,我不会以任何其他方式进行。我个人认为,从一些人的角度来看代码,rs.opensql、conn、adOpenForwardOnly、adLockReadOnly
更容易阅读和理解其含义,但每个都有自己的特点。
Dim objConn, objRs
InsCom.Execute