[高分]关于FORM的上传问题!

sDuma 2004-12-26 10:03:56
我正在做一个BBS,"发新贴"的 POST.ASP 页里有两个 FORM ,FORM1用来提交"主题"与"贴子内容"到POST2.ASP,FORM2用来上传附件,提交到UPLOAD.ASP.现在遇到了一个问题:

我想要的效果是,上传完附件后,FORM1中隐藏域(<input
type="hidden" name="hiddenField" value=>)的VALUE能得到上传附件的路径.请问高手,如何解决?
...全文
368 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhjjhjhj 2004-12-27
  • 打赏
  • 举报
回复
<%
'----------------------------------------------------------------------
'转发时请保留此声明信息,这段声明不并会影响你的速度!
'******************* 无惧上传类 V1.0 ************************************
'作者:梁无惧
'网站:http://www.25cn.com
'电子邮件:yjlrb@21cn.com
'版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件
'发送一份给作者.
'**********************************************************************
'----------------------------------------------------------------------
Dim oUpFileStream

Class UpFile_Class

Dim Form,File,Version,Err

Private Sub Class_Initialize
Version = "无惧上传类 Version V1.0"
Err = -1
End Sub

Private Sub Class_Terminate
'清除变量及对像
If Err < 0 Then
Form.RemoveAll
Set Form = Nothing
File.RemoveAll
Set File = Nothing
oUpFileStream.Close
Set oUpFileStream = Nothing
End If
End Sub

Public Sub GetDate (RetSize)
'定义变量
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
Dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
Dim iFindStart,iFindEnd
Dim iFormStart,iFormEnd,sFormName
'代码开始
If Request.TotalBytes < 1 Then
Err = 1
Exit Sub
End If
If RetSize > 0 Then
If Request.TotalBytes > RetSize Then
Err = 2
Exit Sub
End If
End If
Set Form = Server.CreateObject ("Scripting.Dictionary")
Form.CompareMode = 1
Set File = Server.CreateObject ("Scripting.Dictionary")
File.CompareMode = 1
Set tStream = Server.CreateObject ("ADODB.Stream")
Set oUpFileStream = Server.CreateObject ("ADODB.Stream")
oUpFileStream.Type = 1
oUpFileStream.Mode = 3
oUpFileStream.Open
oUpFileStream.Write Request.BinaryRead (Request.TotalBytes)
oUpFileStream.Position = 0
RequestBinDate = oUpFileStream.Read
iFormEnd = oUpFileStream.Size
bCrLf = ChrB (13) & ChrB (10)
'取得每个项目之间的分隔符
sSpace = MidB (RequestBinDate,1, InStrB (1,RequestBinDate,bCrLf)-1)
iStart = LenB (sSpace)
iFormStart = iStart+2
'分解项目
Do
iInfoEnd = InStrB (iFormStart,RequestBinDate,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iFormStart
oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sInfo = tStream.ReadText
'取得表单项目名称
iFormStart = InStrB (iInfoEnd,RequestBinDate,sSpace)-1
iFindStart = InStr (22,sInfo,"name=""",1)+6
iFindEnd = InStr (iFindStart,sInfo,"""",1)
sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'如果是文件
If InStr (45,sInfo,"filename=""",1) > 0 Then
Set oFileInfo = new FileInfo_Class
'取得文件属性
iFindStart = InStr (iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr (iFindStart,sInfo,"""",1)
sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileName = Mid (sFileName,InStrRev (sFileName, "\")+1)
oFileInfo.FilePath = Left (sFileName,InStrRev (sFileName, "\")+1)
oFileInfo.FileExt = Mid (sFileName,InStrRev (sFileName, ".")+1)
iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr (iFindStart,sInfo,vbCr)
oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileStart = iInfoEnd
oFileInfo.FileSize = iFormStart -iInfoEnd -2
oFileInfo.FormName = sFormName
file.add sFormName,oFileInfo
else
'如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iInfoEnd
oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sFormValue = tStream.ReadText
If Form.Exists (sFormName) Then
Form (sFormName) = Form (sFormName) & ", " & sFormValue
else
form.Add sFormName,sFormValue
End If
End If
tStream.Close
iFormStart = iFormStart+iStart+2
'如果到文件尾了就退出
Loop Until (iFormStart+2) = iFormEnd
RequestBinDate = ""
Set tStream = Nothing
End Sub
End Class

'文件属性类
Class FileInfo_Class
Dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
'保存文件方法
Public Function SaveToFile (Path)
On Error Resume Next
Dim oFileStream
Set oFileStream = CreateObject ("ADODB.Stream")
oFileStream.Type = 1
oFileStream.Mode = 3
oFileStream.Open
oUpFileStream.Position = FileStart
oUpFileStream.CopyTo oFileStream,FileSize
oFileStream.SaveToFile Path,2
oFileStream.Close
Set oFileStream = Nothing
End Function

'取得文件数据
Public Function FileDate
oUpFileStream.Position = FileStart
FileDate = oUpFileStream.Read (FileSize)
End Function
End Class
%>
sDuma 2004-12-27
  • 打赏
  • 举报
回复
to:scoutlin(Scoutlin)
但是 form1 是在 post.asp 页里,如何让 upload.asp 改变 post.asp - form1 - 隐藏域 中的值?
sDuma 2004-12-27
  • 打赏
  • 举报
回复
to: hhjjhjhj(大头)(想变胡萝卜^^)

这样的上传类叫什么名字?而且我也研究过一些,我的服务器只是smartupload组件,可因为没有说明,所以我不知道如何分开"主题","贴子内容","附件"?
madpolice 2004-12-27
  • 打赏
  • 举报
回复
这个问题不难.
关键点是传值问题.
如果你自己看看资料完全能研究明白,而且印象会很深刻.
具体实现的办法有好几种,比如iframe,window.open,showModalDialog,你可以选择一种深入研究。
我推荐用showModalDialog.
gu1dai 2004-12-27
  • 打赏
  • 举报
回复
没必要这样啊
你是想将文件名以及信息写入数据库是吧。直接在上传的时候写。
yb2008 2004-12-27
  • 打赏
  • 举报
回复
为什么不两个做到一个页面中呢?

提供文件和文本域上传!

www.hc189.com/upload.rar
CodeBunny 2004-12-27
  • 打赏
  • 举报
回复
我的想法:
上传FORM做到一个单独的页面里(如UPload.htm),然后放在POST.ASP 的一个<IFrame>里,然后上传请求提交到UPLOAD.ASP时,进行处理,如果正常上传,则返回一个脚本
<script>
parent.document.all.hiddenField.value='upload上传路径';
</script>
如果上处理出错,就把IFrame的Src重定向到UPload.htm
19az 2004-12-27
  • 打赏
  • 举报
回复
你是想先上传附件,然后将附件的有效路径赋给另一个表单的隐藏变量,然后提交该表单是吧


我的实现方法,上传附件的窗口可用window.open打开,传完附件之后关闭该窗口,并用self.opener.document.form1.elements[…].value 给隐藏表单赋值!
mrshelly 2004-12-27
  • 打赏
  • 举报
回复
最好用UBB加到贴子里。
wen1818 2004-12-27
  • 打赏
  • 举报
回复
上传路径在服务器端就可以获得
hhjjhjhj 2004-12-26
  • 打赏
  • 举报
回复
一个页面中有二个FORM只能提交一个吧。
照scoutlin(Scoutlin)的没错。
另外,还可在一个FORM中同时提交,有这样的上传组件。
TSD 2004-12-26
  • 打赏
  • 举报
回复
写一个函数,同时间提交两个表单的事件就可以了
scoutlin 2004-12-26
  • 打赏
  • 举报
回复
如果你用IFRAME嵌入UPLOAD窗口

在UPLOAD。ASP中成功后用
<script>
parent.document.all.hiddenField.value='upload上传路径';
</script>

如果是直接的FROM
在UPLOAD。ASP中成功后用
<script>
document.all.hiddenField.value='upload上传路径';
</script>

28,408

社区成员

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

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