由于我想做公文的上传下载附件功能,肯请大家帮个忙。
我想在一个ASP页面中嵌入上传附件,主要有以下功能:
1、可以浏览文件选择并上传。
2、有下拉框,可以上传多个文件,并在下拉框显示。
3、可以删除,选择下拉框内文件名,点击删除即删除。
另在另一页面内嵌入下载功能如下:
1、可以正常列出以上已经上传的文件列表并可以单击下载
2、可以像上面一样添加和删除文件,文件列表随着马上更新。
我真的累得已经不行了,前天有个CSDN好心人给我参考一篇文章,也是上传到数据中,但是却没有文件名如何入库,如何删除,我不知道如何写接口呀!
我真的希望好心网友能提供源代码或详细指点。谢谢!
好像是用Request.BinarryRead和Request.BinarryWrite
无组件图片与文本同步存入数据库的最简单的办法
动感教育网 发布日期:2001-7-17 字数:4798
一:前言
首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂。或
是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对此有疑
问的网友。
二:准备工作
按照惯例,我先将我的测试环境告诉大家。
系统:Win98se + pws + asp
编程环境:Visual Interdev 6.0
数据库:Access2000
建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。
id | text1 | text2 | img
自动编号 文本 文本 OLE对象 ’如果是sql server 则选择(image即可)
三:Are you ready ,Go!!!
3-1.建上传表单:
我们知道,图像与文本是两种不同制式的文件而如果要同一表单提交的话,(file格式提交)则
我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格式的文件
混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值的函
数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。
upload.asp(具体代码如下)
<% @ language=vbscript %>
<html>
<head>
<meta name="VI60_defaultClientScript" content="VBScript">
<title> File Upload </title>
<script ID="clientEventHandlersVBS" LANGUAGE="vbscript">
<!--
Sub form2_onsubmit //** 这里是关键,当form2在提交的过程中时,即活form1的提交
form1.submit //**所以我们这里用了两个表单,但只用一个提交就可以了。
End Sub
-->
</script>
</head>
<body>
<form name="form1" ENCTYPE="multipart/form-data" ACTION="upimage.asp" METHOD="POST" target="_blank">
Please choose a picture to upload: <br/>
<input NAME="picture" TYPE="FILE"> <br/>
</form>
<form name="form2" action="uptext.asp" method="post">
<input type="text" name="text1"><br/>
<input type="text" name="text2"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
3-2 兵分两路来处理数据。
首先,文本很简单。
uptext.asp (代码如下)
<% @ language=vbscript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
text1=request.form("text1")
text2=request.form("text2")
response.write text1
response.write text2
set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC" ’这里的意思是选择最后一个Id,既刚刚被改动
rs.Open sql,strconn,1,3 ’就是你上传的图像的两个文本字段。
rs("text1")=text1 ’注意,这里是改动不是添加,所以不用addnew。
rs("text2")=text2
rs.Update
rs.Close
%>
接着,来处理图像。
upimage.asp (具体代码如下)
<%
FormSize = Request.TotalBytes ’得到数据
FormData = Request.BinaryRead( FormSize )
function ImageUp(formsize,formdata) ’这个函数的功能是截取其中的图像部分。
bncrlf=chrb(13) & chrb(10) ’做成函数后。以后你可以自己随意使用了。
divider=leftb(formdata,instrb(formdata,bncrlf)-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
imageup=midb(formdata,datastart,dataend)
end function
Image=ImageUp (FormSize,Formdata) ’这里就是图像部分了。
set rs=server.CreateObject("adodb.recordset")
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
sql="SELECT * FROM imgtable"
rs.Open sql,strconn,1,3
rs.AddNew ’因为表单二在表单一提交的过程中下提交了。
rs("img").appendchunk Image ’所以这里是添加。
rs.Update
rs.Close
response.contenttype="image/gif"
response.binarywrite imageup(formsize,formdata) ’这里是显示图像。表示成功!
%>
啊?!?!原来如此简单!
四:“显示,我要同页显示”
终于完成了图文同步提交。
现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。
主页面:show.asp
<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
set rs=Server.CreateObject("adodb.recordset")
sql="SELECT top 1 * FROM imgtable ORDER BY id DESC"
rs.Open sql,strconn,1,3
%>
<html>
<body>
以下是你的上传资料。<br/>
文本一:<% Response.Write rs("text1") %><br/>
文本二:<% Response.Write rs("text2") %><br/>
你的图像:
<img src=showimg.asp?id=<%=rs("id")%>> ’注意这里,这才是关键。他可以实现网页图像与文本
</body> ’共存。
</html>
幕后页面:showimg.asp
<%@ Language=VBScript %>
<%
strconn="driver={microsoft access driver (*.mdb)};dbq="&server.MapPath("test.mdb")
id=Request("id")
set rs=server.CreateObject("adodb.recordset")
sql="SELECT * FROM imgtable where id="&id
rs.Open sql,strconn,1,3
response.contenttype="image/gif"
Response.BinaryWrite rs("img")
%>
http://www.5xsoft.com/data/200104/2822340301.htm
说明:
一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,大多解决法就是安装第三方上传组件。可第三方组件有很多问题,有的组件要注册,有的组件要在表单中加上他的版权信息。还有的就是组件的兼容问题。
在网上也流传了很多无组件上传的代码,但都是只能上传文本文件,或是只能将文件上传到数据库中。
我这段时间在研究ASP,发现可以不用第三方组件上传任意类型的文件。就写了这个类,给大家一个方便,整个类放在一个文件中: upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示例程序,可以直接使用。