关于enctype="multipart/form-data"提交表单的问题

村里的月光 2002-04-02 04:33:39
我在处理图片上传时,在<form>中加入 enctype="multipart/form-data"后为什么其他无法读到其他表单(除文件上传表单外)的内容啊,我用的是request.form("biaodanming")和request.QueryString("biaodanming")都不行,得到的内容都是一片空白。
谁能帮我啊,谢谢!处理上传图片和同时提交表单的问题我处理不了了。
...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanhe 2002-04-02
  • 打赏
  • 举报
回复
enctype="multipart/form-data 后你提交的数据是按照不同于普通表单的数据格式提交的,当然无法request啦。你需要自己利用request.binarryRead来读出所有的数据,然后自己进行解释。比较麻烦,建议查一查以前的贴子以及网上找一找相关上传组件的源代码。
BrentIvan 2002-04-02
  • 打赏
  • 举报
回复
用了enctype="multipart/form-data"后form中的元素都以Stream的形式上传,所以不能以普通的Request方式取。你看一下下面这个例子, 是实现无组件上传的,可以取到其他元素的value


<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
<link rel="stylesheet" href="../public/css.css">
</head>
<script language="javascript">
<!--
function checkform1()
{

if (form1.names.value=="")
{
alert("请输入名称!")
form1.names.focus()
return false
}
if (form1.pic.value=="")
{
alert("请选择图片!")
form1.pic.focus()
return false
}
return true
}

//-->
</script>
<body>

<table border="0" width="100%">
<form name="form1" enctype="multipart/form-data" action="upload.asp" method="post" onsubmit="return checkform1()">
<tr>
<td width="100%" colspan="2">
<p align="center"><b>上传示例</b></td>
</tr>

<tr>
<td width="40%" align="right">名称:</td>
<td width="60%"><input type="text" name="names" size="30" maxlength="20" class="input1"></td>
</tr>
<tr>
<td width="40%" align="right">图样:</td>
<td width="60%"><input type="file" name="pic" size="30" maxlength="20" class="input1" onblur="document.all.picview.src=document.all.pic.value"></td>
</tr>

<tr>
<td width="40%" align="right"> </td>
<td width="60%"><input type="submit" value=" o k " class="inputbtn"></td>
</tr>
<tr>
<td width="100%" align="center" colspan="2">
图象预览(选择图片后,点击页面任意处即可进行预览)<br>
<img id="picview" border="1">
</td>

</tr>
</form>
</table>

</body>

</html>


-----upload.asp
<!--#include file="savefile.asp"-->
<%
Set objStream = Server.CreateObject("ADODB.Stream")

objstream.mode=3
objStream.Type = 1
objStream.Open

objstream.write Request.BinaryRead(Request.TotalBytes)

names= getvalue("names",true,"")

pic=getvalue("pic",false,"upimg/")


objstream.close
response.write("names:"+names)
response.write ("文件已上传!("+pic+")")
%>


-----savefile.asp
<%
Dim stream1,stream2,istart,iend,filename
istart=1
vbEnter=Chr(13)&Chr(10)

function getvalue(fstr,foro,paths)'fstr为接收的名称,foro布尔false为文件上传,true 为普通字段,path为上传文件存放路径
if foro then
getvalue=""
istart=instring(istart,fstr)

istart=istart+len(fstr)+5
iend=instring(istart,vbenter+"-----------------------------")
if istart>5+len(fstr) then
getvalue=substring(istart,iend-istart)

else
getvalue=""
end if
else
istart=instring(istart,fstr)
istart=istart+len(fstr)+13
iend=instring(istart,vbenter)-1

filename=substring(istart,iend-istart)
filename=getfilename(filename)

istart=instring(iend,vbenter+vbenter)+3
iend=instring(istart,vbenter+"-----------------------------")
filestart=istart
filesize=iend-istart-1
objstream.position=filestart
Set sf = Server.CreateObject("ADODB.Stream")
sf.Mode=3
sf.Type=1
sf.Open
objstream.copyto sf,FileSize

if filename<>"" then
Set rf = Server.CreateObject("Scripting.FileSystemObject")
i=0
fn=filename
while rf.FileExists(server.mappath(paths+fn))

fn=cstr(i)+filename
i=i+1
wend
filename=fn
sf.SaveToFile server.mappath(paths+filename),2
end if
getvalue=filename
end if

end function

Private function GetFileName(FullPath)
If FullPath <> "" Then
GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
Else
GetFileName = ""
End If
End function


Function inString(theStart,varStr)
dim i,j,bt,theLen,str
InString=0
Str=toByte(varStr)
theLen=LenB(Str)
for i=theStart to objStream.Size-theLen
if i>objstream.size then exit Function

objstream.Position=i-1
if AscB(objstream.Read(1))=AscB(midB(Str,1)) then
InString=i
for j=2 to theLen
if objstream.EOS then
inString=0
Exit for
end if
if AscB(objstream.Read(1))<>AscB(MidB(Str,j,1)) then
InString=0
Exit For
end if
next
if InString<>0 then Exit Function
end if
next
End Function


function toByte(Str)
dim i,iCode,c,iLow,iHigh
toByte=""
For i=1 To Len(Str)
c=mid(Str,i,1)
iCode =Asc(c)
If iCode<0 Then iCode = iCode + 65535
If iCode>255 Then
iLow = Left(Hex(Asc(c)),2)
iHigh =Right(Hex(Asc(c)),2)
toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh)
Else
toByte = toByte & chrB(AscB(c))
End If
Next
End function

Function subString(theStart,theLen)
dim i,c,stemp
objStream.Position=theStart-1
stemp=""
for i=1 to theLen
if objStream.EOS then Exit for
c=ascB(objStream.Read(1))
If c > 127 Then
if objStream.EOS then Exit for
stemp=stemp&Chr(AscW(ChrB(AscB(objStream.Read(1)))&ChrB(c)))
i=i+1
else
stemp=stemp&Chr(c)
End If
Next
subString=stemp
End function
%>

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧