如何上传一个文件到Access数据库

来源:互联网 发布:linux scp命令详解 编辑:程序博客网 时间:2024/05/16 08:14
文件上传是一个站点不可或缺的功能,为了方便自己的站点上传文件就自己开发了个无组件上传了,功能还不错--支持单文件、多文件、文件表单混合上传,有兴趣的可以到这里下载看看!
   不多啰嗦了,直奔主体吧。本例子是以我最新发布的上传类为基础的,版本为v8.12.20。
   首先新建一个access数据库bytes.mdb,添加一个表img,再给表添加3个字段--ID(自动编号)、Title(文本)、Image(OLE 对象),括号内为数据类型
   一、上传界面[code]    <html>
<head>
<title>An-Upload无组件上传类示例</title>
</head>
<body>
<form name="upload" method="post" action="AddToDB.asp" enctype="multipart/form-data">
请选择一个图象文件:<br />
文本 : <input type="text" name="input1" /> <br />
文件 : <input type="file" name="file1" /> <br />
<input type="submit" value="开始上传" />
</form></body></html>[/code] 注意:Form的method属性必须是post,并且必须设置enctype="multipart/form-data"属性(普通提交是没有这个属性的)!!
    这里我们提交到AddToDB.asp,文本域和文件域的名字分别是input1和file1,保存这些代码到upload.asp文件!

二、下面就是AddToDB.asp文件了,代码如下[code] <!--#include file="upload_class.asp"-->
<!--#include file="conn.asp"-->
<html>
<head>
<title>An-Upload无组件上传类</title>
</head>
<body>
<%
Dim Upload,successful

set Upload=new AnUpload
     '创建类实例
Upload.SingleSize=200*1024
     '设置单个文件最大上传限制,按字节计;默认为不限制
Upload.MaxSize=200*1024
     '设置最大上传限制,按字节计;默认为不限制
Upload.Exe="jpg|bmp|gif"
     '设置合法扩展名,以|分割,忽略大小写
Upload.GetData()
     '获取并保存数据,必须调用本方法

if Upload.Err>0 then     '判断错误号,如果myupload.Err<=0表示正常
     response.write Upload.Description    '如果出现错误,获取错误描述
     response.end
else
       input1=Upload.Forms("input1")              '获取表单input1的值
       if Upload.forms("file1")<>"" then         '这里判断你file1是否选择了文件
         set tempCls=Upload.files("file1")       '获取保存文件信息的类
             Tempbytes=tempCls.getbytes() '保存二进制数据到变量(调用getbytes方法)
         set tempCls=nothing
       end if
end if
set Upload=nothing    '销毁类实例

set rs=server.createobject("adodb.recordset")  '创建一个数据集对象
rs.open "select * from [img]",conn,1,3             '打开数据表,注意后面的参数1,3
rs.addnew()                                                  '添加一个新行(数据集游标会自动移动到本行)
rs("title")=input1                               '添加数据input1到字段title
rs("image").AppendChunk Tempbytes   '添加二进制数据到数据库的Image字段
rs.update              '更新数据集到数据库
rs.close                 '关闭数据集
set rs=nothing       '销毁
conn.close             '关闭数据库连接
set conn=nothing  '销毁
response.write "上传到数据库成功"
%>
</body>
</html>[/code]这样上传程序就写好了,注意添加到数据库的时候要用AppendChunk方法;开头不要忘了把上传类和数据库连接文件包含进来
   在浏览器访问upload.asp页面,添加文本、选择一个图片(小于200KB,因为我们在上面作了上传限制),开始上传!
   到这里,如果顺利的话,文件已经成功保存到数据库了!

三、保存到数据库后怎么读出来呢?

    再看下面这段代码(保存到ReadFromDB.asp)[code]<!--#include file="conn.asp"-->
<%
id=request.querystring("id")
sql="select * from img where [id]=" & id '通过ID来获取文件数据
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
response.contenttype="image/jpeg"     '设置页面响应类型
response.clear
response.binarywrite rs("image")
response.flush
response.end
rs.close
set rs=nothing
conn.close
set conn=nothing
%>[/code]先别着急运行这段代码,继续看下面的代码(index.asp)[code]<!--#include file="conn.asp"-->
<html>
<head>
<title>An-Upload无组件上传类</title>
</head>
<body>
<%
sql="select * from img order by [id] desc"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
if rs.eof and rs.bof then
        response.write "没有任何数据!<a href=""upload.asp"">现在上传</a>"
else
        i=0
        response.write "<h2>上传的图片列表</h2> <a href=""upload.asp"">现在上传</a><hr />"
        do while not rs.eof
                i=i+1
                response.write i & "." & rs("Title") & "<br />" & vbcrlf
                response.write "<img onload=""if(this.width>300){this.width=300;}"" "
                response.write "onclick=""window.open('ReadFromDB.asp?id="&rs("id")&"');"" "
                response.write "src=""ReadFromDB.asp?id="&rs("id")&""" alt="""&rs("title")&""" />" & vbcrlf
                response.write "<br /><br />"&vbcrlf
                  rs.movenext
        loop
end if
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
</body>
</html>[/code]四、好了到此为止你文件夹里应该有以下文件了
bytes.mdb     数据库
upload.asp   上传界面
AddToDB.asp   添加文件到数据库的程序
ReadFromDB.asp  从数据库读取文件的程序
index.asp   显示数据库记录的程序

忘了,还有数据库连接文件conn.asp[code]<%
dim conn,connstr,sql,rs
Connstr="provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("bytes.mdb")
Set Conn=Server.CreateObject("ADODB.Connection")
conn.Open connstr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "服务器出现问题,如有任何问题请联系管理员。"
Response.End
End If
%>[/code]还有关键的文件上传类---Upload_class.asp,可以在我的站点上下载到http://www.ii-home.cn/mycodes.asp

   到这里,一个简单的保存文件到数据库并显示的程序就写完了;
  在浏览器运行下index.asp,是不是看到在第二步上传的图片了,如果没有的话请仔细查看前面的步骤来修改代码!

   总体来说,这个上传类还是相对比较完美的,操作比较灵活,在提取form表单的时候支持相同name属性的表单名(数据以,分割),保存服务器可以随意选择保存方式--既可以以原名保存,也可以用程序自动生成的文件名保存(默认);同时,准确判断后缀,增强了上传的安全性。属性设置也比较灵活

   好了,就写这些了,凌晨2点该休息了!有任何问题可以联系我QQ4-1-7-8-3-3-2-7-2