在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>文档中心>ASP>文档A0000505 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入
相关文章
没有相关文章
发表文章
无组件上传文字与图片至数据库之gztiger解决方案

作者:gztiger     提交人:gztiger     发布时间:03-10-16     文章类型:原创     浏览量:3206
参考链结:    
关键字:无组件上传图片
[本文档没有附件]
字体:    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色) [A0000505]

无组件上传文字与图片至数据库之gztiger解决方案
                    作者:gztiger 日期:2003-10-16
    曾一度为图片与文字上传至数据库困扰,《化境无组件上传图片2.0》写得很好,但不是完全适合自己。经过认真阅读源代码、修改与测试,将其改为无组件上传多条文字信息与多张图片至数据库。并在iis5+access2000+asp测试通过。现把源代码公布,希望能对那些曾经也被这问题困扰的朋友有所帮助。同时希望各位同道斧正。
    声明:《化境无组件上传图片2.0》并非我写的,在此对《化境无组件上传图片2.0》的作者真诚说声:谢谢!
代码如下:

upfile.index ---------------------------------------------------------------------------------------
<!--        郑  重  声    明
    这是免费代码,从《化境无组件上传图片2.0》修改而来,目的只为对这问题有困扰的朋友有所帮助,
并对《化境无组件上传图片2.0》的作者说声:谢谢!本代码在iis5+access2000+asp测试通过
                                                                ——gztiger
-->
<html>
<head>
<title>化境编程界无组件上传文字与图片至数据库之gztiger解决方案&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改者:gztiger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="upfile.asp" enctype="multipart/form-data" >
  <table border="1" cellspacing="0" cellpadding="0" bordercolorlight="#000000" bordercolordark="#CCCCCC" width="91" height="23">
    <tr>
      <td align="left" valign="middle" height="18" width="18">&nbsp;</td>
      <td bgcolor="#CCCCCC" align="left" valign="middle" height="18" width="67"> 文件上传</td>
    </tr>
  </table>
  <table width="71%" border="1" cellspacing="0" cellpadding="5" align="center" bordercolordark="#CCCCCC" bordercolorlight="#000000">
    <tr bgcolor="#CCCCCC">
      <td height="22" align="left" valign="middle" bgcolor="#CCCCCC">&nbsp;化境编程界文件上传修改版
                修改者:<a href="mailto:gztiger@21cn.com">gztiger</a> </td>
    </tr>
    <tr align="left" valign="middle" bgcolor="#eeeeee">
      <td bgcolor="#eeeeee" height="92">
    <!--此处可任意添加多个文本与文件框
        在upfile.asp中对应添加TextN=Trim(upload.form("TextN")) 、Rs("imagedataN")=Image_Set(N)
      回显提交信息就不用说了 ,数据库表中亦要添加相对字段名:)
    -->
    文本框1:<input type="text" name="Text1" value="图片与文本上传测试1" ><br>
      文本框2:<input type="text" name="Text2" value="图片与文本上传测试2" ><br>
      文本框3:<input type="text" name="Text3" value="图片与文本上传测试3" ><br>
      图象1 :<input type="file" name="Image1" style="width:400"  value=""><br>
      图象2 :<input type="file" name="Image2" style="width:400"  value=""><br>
      图象3 :<input type="file" name="Image3" style="width:400"  value=""><br>
      文本框4:<input type="text" name="Text4" value="图片与文本上传测试4" ><br>
      文本框5:<input type="text" name="Text5" value="图片与文本上传测试5" ><br>
      文本框6:<input type="text" name="Text6" value="图片与文本上传测试6" ><br>
      文本框7:<input type="text" name="Text7" value="图片与文本上传测试7" >
      </td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#eeeeee">
      <td bgcolor="#eeeeee" height="24"> <input type="submit" name="Submit" value="提  交" class="bt">
        <input type="reset" name="Submit2" value="清  空" class="bt"> </td>
    </tr>
  </table>
</form>
</body>
</html>

upfile.asp -----------------------------------------------------------------------------------------

<%Server.ScriptTimeOut=5000%>
<!--#include FILE="upload_5xsoft.inc"-->
<title>化境编程界文件上传修改版&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改者:gztiger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</title>
<%
dim upload,file,formName,formPath,iCount
set upload=new upload_5xsoft ''建立上传对象

Text1=Trim(upload.form("Text1")) '----获取表单文本框信息(原来代码用for循环)-目的为了说明获取文本框信息的方法
Text2=Trim(upload.form("Text2"))
Text3=Trim(upload.form("Text3"))
Text4=Trim(upload.form("Text4"))
Text5=Trim(upload.form("Text5"))
Text6=Trim(upload.form("Text6"))
Text7=Trim(upload.form("Text7"))


iCount=0
n=1

response.write "<br>"
for each formName in upload.objFile ''------------------列出所有上传了的文件
set file=upload.file(formName)  ''--------------------生成一个文件对象
Image_countn=Image_countn&","&file.FileName '----------把图象名做成数组
if file.FileSize>0 then        ''------------------------如果 FileSize > 0 说明有文件数据
  file.SaveAs Server.mappath("img/"&file.FileName)  ''----------保存文件
end if
n=n+1
set file=nothing
next
set upload=nothing  '-------------------------------'删除此对象
Image_Set=split(Image_countn,",")'---------------------返回数组

'------添加信息到数据库-------------------------------------
Connstr="DBQ="+server.mappath("database\img_text.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"     
Set Conn=Server.createobject("ADODB.Connection")
Conn.Open Connstr
Set Rs=Server.CreateObject("ADODB.RecordSet")
sqlstr="select * from imgdata"
Rs.Open Sqlstr,Conn,1,3
if not rs.eof then
id=Rs("id")+1
else
id=1
end if
Rs.Addnew
Rs("Text1")=Text1
Rs("Text2")=Text2
Rs("Text3")=Text3
Rs("Text4")=Text4
Rs("Text5")=Text5
Rs("Text6")=Text6
Rs("Text7")=Text7
Rs("imagedata1")=Image_Set(1)
Rs("imagedata2")=Image_Set(2)
Rs("imagedata3")=Image_Set(3)
Rs.Update
Rs.Close
Set Rs=Nothing
upload_ok=true

if upload_ok=true then
'-------回显提交信息---------------------------
response.Write("您上传的信息如下:"&"<br>")
Connstr="DBQ="+server.mappath("database\img_text.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"     
Set Conn=Server.createobject("ADODB.Connection")
Conn.Open Connstr
Set Rs=Server.CreateObject("ADODB.RecordSet")
sqlstr="select * from imgdata order by id desc"
Rs.Open Sqlstr,Conn,1,1
%>
文本1:<%=Rs("Text1")%><br>
文本2:<%=Rs("Text2")%><br>
文本3:<%=Rs("Text3")%><br>
文本4:<%=Rs("Text4")%><br>
文本5:<%=Rs("Text5")%><br>
文本6:<%=Rs("Text6")%><br>
文本7:<%=Rs("Text7")%><br>
<%if Rs("imagedata1")<>"" then%>
图象1:<%=Rs("imagedata1")%><br>
<img src="img/<%=Rs("imagedata1")%>"><br>
<%end if%>
<%if Rs("imagedata2")<>"" then%>
图象2:<%=Rs("imagedata2")%><br>
<img src="img/<%=Rs("imagedata2")%>" ><br>
<%end if%>
<%if Rs("imagedata3")<>"" then%>
图象3:<%=Rs("imagedata3")%><br>
<img src="img/<%=Rs("imagedata3")%>" ><br>
<% end if
Rs.Close
Set Rs=Nothing
end if
%>

upload_5xsoft.inc ----------------------------------------------------------------------------------
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>
dim Data_5xsoft

Class upload_5xsoft
 
dim objForm,objFile,Version

Public function Form(strForm)
  strForm=lcase(strForm)
  if not objForm.exists(strForm) then
    Form=""
  else
    Form=objForm(strForm)
  end if
end function

Public function File(strFile)
  strFile=lcase(strFile)
  if not objFile.exists(strFile) then
    set File=new FileInfo
  else
    set File=objFile(strFile)
  end if
end function


Private Sub Class_Initialize
  dim RequestData,sStart,vbCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
  dim iFileSize,sFilePath,sFileType,sFormValue,sFileName
  dim iFindStart,iFindEnd
  dim iFormStart,iFormEnd,sFormName
  Version="化境HTTP上传程序 Version 2.0"
  set objForm=Server.CreateObject("Scripting.Dictionary")
  set objFile=Server.CreateObject("Scripting.Dictionary")
  if Request.TotalBytes<1 then Exit Sub
  set tStream = Server.CreateObject("adodb.stream")
  set Data_5xsoft = Server.CreateObject("adodb.stream")
  Data_5xsoft.Type = 1
  Data_5xsoft.Mode =3
  Data_5xsoft.Open
  Data_5xsoft.Write  Request.BinaryRead(Request.TotalBytes)
  Data_5xsoft.Position=0
  RequestData =Data_5xsoft.Read

  iFormStart = 1
  iFormEnd = LenB(RequestData)
  vbCrlf = chrB(13) & chrB(10)
  sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,vbCrlf)-1)
  iStart = LenB (sStart)
  iFormStart=iFormStart+iStart+1
  while (iFormStart + 10) < iFormEnd
  iInfoEnd = InStrB(iFormStart,RequestData,vbCrlf & vbCrlf)+3
  tStream.Type = 1
  tStream.Mode =3
  tStream.Open
  Data_5xsoft.Position = iFormStart
  Data_5xsoft.CopyTo tStream,iInfoEnd-iFormStart
  tStream.Position = 0
  tStream.Type = 2
  tStream.Charset ="gb2312"
  sInfo = tStream.ReadText
  tStream.Close
  '取得表单项目名称
  iFormStart = InStrB(iInfoEnd,RequestData,sStart)
  iFindStart = InStr(22,sInfo,"name=""",1)+6
  iFindEnd = InStr(iFindStart,sInfo,"""",1)
  sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
  '如果是文件
  if InStr (45,sInfo,"filename=""",1) > 0 then
    set theFile=new FileInfo
    '取得文件名
    iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
    iFindEnd = InStr(iFindStart,sInfo,"""",1)
    sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
    theFile.FileName=getFileName(sFileName)
    theFile.FilePath=getFilePath(sFileName)
    '取得文件类型
    iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
    iFindEnd = InStr(iFindStart,sInfo,vbCr)
    theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)
    theFile.FileStart =iInfoEnd
    theFile.FileSize = iFormStart -iInfoEnd -3
    theFile.FormName=sFormName
    if not objFile.Exists(sFormName) then
      objFile.add sFormName,theFile
    end if
  else
  '如果是表单项目
    tStream.Type =1
    tStream.Mode =3
    tStream.Open
    Data_5xsoft.Position = iInfoEnd
    Data_5xsoft.CopyTo tStream,iFormStart-iInfoEnd-3
    tStream.Position = 0
    tStream.Type = 2
    tStream.Charset ="gb2312"
          sFormValue = tStream.ReadText
          tStream.Close
    if objForm.Exists(sFormName) then
      objForm(sFormName)=objForm(sFormName)&", "&sFormValue     
    else
      objForm.Add sFormName,sFormValue
    end if
  end if
  iFormStart=iFormStart+iStart+1
  wend
  RequestData=""
  set tStream =nothing
End Sub

Private Sub Class_Terminate 
if Request.TotalBytes>0 then
  objForm.RemoveAll
  objFile.RemoveAll
  set objForm=nothing
  set objFile=nothing
  Data_5xsoft.Close
  set Data_5xsoft =nothing
end if
End Sub
 

Private function GetFilePath(FullPath)
  If FullPath <> "" Then
  GetFilePath = left(FullPath,InStrRev(FullPath, "\"))
  Else
  GetFilePath = ""
  End If
End  function

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

Class FileInfo
  dim FormName,FileName,FilePath,FileSize,FileType,FileStart
  Private Sub Class_Initialize
    FileName = ""
    FilePath = ""
    FileSize = 0
    FileStart= 0
    FormName = ""
    FileType = ""
  End Sub
 
Public function SaveAs(FullPath)
    dim dr,ErrorChar,i
    SaveAs=true
    if trim(fullpath)="" or FileStart=0 or FileName="" or right(fullpath,1)="/" then exit function
    set dr=CreateObject("Adodb.Stream")
    dr.Mode=3
    dr.Type=1
    dr.Open
    Data_5xsoft.position=FileStart
    Data_5xsoft.copyto dr,FileSize
    dr.SaveToFile FullPath,2
    dr.Close
    set dr=nothing
    SaveAs=false
  end function
  End Class
</SCRIPT>

-------------------------------------------------
数据库名:img_text
表:imgdata
  字段名        类型
id            自动编号
imagedata1    文本
imagedata2    文本
imagedata3    文本
text1          文本
text2          文本
text3          文本
text4          文本
text5          文本
text6          文本
text7          文本
-------------------------------------------------
还要新建一空的文件夹img存放图片.
--------------------------------------------------

    以上是全部代码,希望能对大家有所帮助.

关于这篇文章的评论 [注意:这里仅仅是给大家提供了一个发表对文章本身看法的地方,如果有疑问,请到论坛提出] 我要提问!
crazysoul        2004/10/14 22:06:00
意见
通常是用个<IFRAME>来转载上传文件那部分的,文字另外FORM.
不过这样也好,全部整到一起.不过有个小问题,如果上传文件太大的话,容易说页面超时,那如果之前写了一大段文字的话就...
不过这是个细节小问题,自己加个历史保留属性就行.
Lonelyram        2004/1/1 1:45:00
好的不得了
佩服,很实用呀!谢谢大哥哥
china_zch        2003/12/22 19:59:00
有点意思啊
不错
标题
内容
发言
*您尚未以注册用户身份登录,不能发表评论。这里登录
您的位置
  (c)2000-2019 Yup Studio, all rights reserved.  
132.8125