[摘要]doc" ourRequest.DeniedFilesList = "jpg" ourRequest.MaxFileSize = 10*1000 '10k ou...
doc"
ourRequest.DeniedFilesList = "jpg"
ourRequest.MaxFileSize = 10*1000 '10k
ourRequest.TotalMaxFileSize = 15*1000 '15k
on error resume next
ourRequest.Upload
if err.number <> 0 then
response.write err.description
response.end
end if
on error goto 0 '关闭on error resume next
%>
<%=ourRequest.Form(0).Name%>:<%=ourRequest.Form("file1_desc")%><br>
<%=ourRequest.Form(1).Name%>:<%=ourRequest.Form("file2_desc")%><br>
<%=ourRequest.Form(2).Name%>:<%=ourRequest.Form(2).Count%><br>
<%=ourRequest.Form(3).Name%>:<%=ourRequest.Form(3)%>
一共有<%=ourRequest.Forms.Count%>个文本单元<hr>
<%=ourRequest.File(0).Name%>:
<%=ourRequest.File("file1").ContentType%>:
<%=ourRequest.File("file1").Size%>byte:
<%=ourRequest.File("file1").FileName%>:
<%=ourRequest.File("file1").FilePath%><br>
<%=ourRequest.File(1).Name%>:
<%=ourRequest.File("file2").ContentType%>:
<%=ourRequest.File("file2").Size%>byte:
<%=ourRequest.File("file2").FileName%>:
<%=ourRequest.File("file2").FilePath%><br>
一共有<%=ourRequest.Files.Count%>个文件单元,共<%=ourRequest.TotalBytes%>Byte<hr>
<%
'测试存盘。
Dim desFolder:desFolder=server.mappath("incoming")
Call ourRequest.SaveTo(desFolder)
Call ourRequest.File(0).SaveAs(desFolder, "复件 "&ourRequest.File(0).FileName)
'因为选择了不覆盖的方法,所以第二次执行这一句会出错,一定要注意啊
Call ourRequest.File("file2").SaveWithoutOverwrite(desFolder,_
"复件 "&ourRequest.File(1).FileName)
%>
<%
'测试写库
If False Then '要测的话,就把False改成True。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 数据库结构:
' ID 自增主键
' img access里,用ole对象型;在sql server里,就应该是image型了
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 这部分没啥好说的。。
Dim connGraph, rec
set connGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={Microsoft Access Driver (*.mdb)};DBQ=" &_
server.MapPath("img.mdb")
connGraph.Open
set rec=server.createobject("ADODB.recordset")
rec.Open "SELECT * FROM img where id is null",connGraph,1,3
rec.addnew
rec("img").appendchunk ourRequest.File(0)
rec.update
rec.close
set rec=nothing
set connGraph=nothing
' 读库代码如下。当然,读库显示是要在其他页面进行的。。
' 这部分也没啥好说的。不用contentType,IE也认。要是其他浏览器,就设一下。
'set connGraph=server.CreateObject("ADODB.connection")
'connGraph.ConnectionString="driver={Microsoft Access Driver (*.mdb)};DBQ=" &_
' server.MapPath("img.mdb")
'connGraph.Open
'set rec=server.createobject("ADODB.recordset")
'rec.Open "SELECT * FROM img order by id desc",connGraph,1,1
'response.BinaryWrite rec("img")
'rec.close
'set rec=nothing
'set connGraph=nothing
End If
%>
<%
'清理资源,别忘了啊
Set ourRequest = Nothing
%>
好了,把这3个文件保存到一个虚拟目录下,然后,建立一个incoming的子目录,并且给足权限(关于权限,看看http://www.2yup.com/asp/forum/branch.asp?pid=2430#F0002430),就可以测试了。现在,一个功能强大的无组件上传类就已经完成了。
==============================================================
结束语
这里演示了文件上传从分析倒实践的全过程。通过不懈的努力,我们终于达到了预定的目标。当然,这个实现,和“完美”尚有差距。他没有经过严格测试;还存在至少两个BUG;还有几个蹩脚的实现。这些,都是值的改进的。但是,如果能掌握这个示例的完整过程,相信大家也可以胜任各种复杂的应用,能够独立的完成一般的设计和编码工作了。所以,我们的收获,绝不仅仅是知道了怎样上传一个文件,更多的,是知道了怎样达到一个目标。最后,附上整个示例的源码和用到的库。刚刚(2002-12-02 09:00)才进行了更新,做了一个自认为比较清晰的例子。不需要看懂,就可以用了 ^ ^:
http://www.2yup.com/asp/attach/A0000006.zip
注意,把这个包里的东西放到一个虚拟目录下,其中的incoming子目录一定要有IUSR的写权限(关于权限,看看http://www.2yup.com/asp/forum/branch.asp?pid=2430#F0002430)。有任何问题,请到论坛提出。
关键词:ASP无组件上传·从原理剖析到实战(下)