简介 文件上传是将任意的文件从客户机发送到服务器的过程。最简单、最方便的上传方法是使用支持RFC1867的浏览器,如微软的Internet Explorer4.0以上版本,Netscape3.0以上版本,或者带附件的Internet Explorer3.0。基于浏览器的文件上传是通过带有属性ENCTYPE="multipart/form-data"的HTML form实现的。这个form也必须包含一个或多个项,以让用户指定要上传的本地文件。 带有ENCTYPE="multipart/form-data"属性的form所发送的数据必须被一个服务器端过程解析,以展开上传的文件和其他非文件项。在ASP环境中,这种任务用编译好的active server组件能最好的完成,比如Persits软件公司的AspUpload (http://www.persits.com)。 本文所有示例都是建立在你的系统中安装了AspUpload的基础上的。可以在这里下AspUpload 免费评估版http://www.persits.com/aspupload.html。解压文件后,将AspUpload.dll 放在任意目录中,在MS DOS窗口中执行命令 regsvr32 c:\dir\AspUpload.dll 开始 我们来创建一个简单的能上传3个文件的HTML form,和控制上传的脚本。 这里是第一个HTML文件 Test1.htm: 每个 项在浏览器中显示成为一个带有"Browse..."按钮的文本输入框。如果你没看见Browse按钮,很有可能说明你的浏览器不支持文件上传。 这里是相应的上传脚本 UploadScript1.asp: <% Set Upload = Server.CreateObject("Persits.Upload.1") Count = Upload.Save("c:\upload") %> <% = Count %> files uploaded. ASP脚本的第一行仅仅创建了一个AspUpload对象的实例。第二行调用组件的Save方法,它实际上的作用是:它解析从浏览器发送的东西,计算出有多少个文件正在上传,并且把他们存在服务器上指定的目录。目录名可能以反斜线结束,也可能不是。所有文件将以他们原来的名字存放在目录中。我们很快将看到如何更改任意或者所有文件的名字。 Save方法返回成功上传的文件数量。万一发生错误,这个方法将抛弃之。 注意你能够使用我们的form中任意或者全部三个输入框。AspUpload有足够的智慧判断出哪些输入框使用了,哪些没有。 使用FILES和FORMS集合访问单个form项 我们看看第二组示例: Test2.htm UploadScript2.asp <% Set Upload = Server.CreateObject("Persits.Upload.1") Upload.Save "c:\upload" %> Files: <% For Each File in Upload.Files Response.Write File.Name & "=" & File.Path & " (" & File.Size & ") " Next %> <% Set Upload = Server.CreateObject("Persits.Upload.1") Upload.Save "c:\upload" On Error Resume Next For Each File in Upload.Files File.ToDatabase "DSN=data;UID=sa;PWD=xxx;", "insert into Blobs(id, Path, BigBlob) values(12, ''" & File.Path & "'', ?)" if Err <> 0 Then Response.Write "Error saving the file: " & Err.Description Else File.Delete Response.Write "Success!" End If Next %> 这一行 On Error Resume Next 指示asp当以外发生时,不要显示错误信息,只将意外代码和描述存放到内建的Err对象,并且继续脚本的执行。 下一行 File.ToDatabase "DSN=data;UID=sa;PWD=xxx;", "insert into Blobs(id, Path, BigBlob) values(12, ''" & File.Path & "'', ?)" 是将文件存放入数据库所采用的一切。我们来检查一下这个方法的两个参数: 第一个参数是下列格式的ODBC连接字串: "DSN=datasource;UID=userid;PWD=password; 第二个参数是SQL INSERT或者UPDATE语句,带有一个问号(?),并且只能带一个。它的作用是为要存储的文件提供空间容器。在这个例子中,我们下部的数据库表Blobs包含三栏:一个Integer ID,一个VARCHAR Path,和一个IMAGE BigBlob。这个SQL INSERT语句将12放入ID栏,文件路径放入Path栏,真实文件放入BigBlob栏。 下一行检查语句在成功执行前是否正确。如果成功,Err对象取值0并且删除文件 (File.Delete行),因为文件已经存入数据库,不需要再放在上传路径中了。否则,Err包含一个数字错误代码,并且Err.Description包含对于意外的语言描述。 将GIF和JPEG图象存入数据库很常见。将图象从数据库中取出并显示在HTML页中,你不需要使用任何第三方组件。ADO就能完成任务。 在你的HTML页面中放入普通标签,将SRC属性指向一个ASP脚本,例如 GetImage.asp 脚本看起来可能会是这样 <% Set db = Server.CreateObject("ADODB.Connection") db.Open "data" Set rs =db.Execute("SELECT BigBlob FROM Blobs where id = " & Request("id") ) Response.ContentType = "image/jpeg" ''(or "image/gif") Response.BinaryWrite rs("BigBlob") %> -------------------------------------------------------------------------------- 哪里能得到更多关于AspUpload的信息 要得到完整的AspUpload文档,并下载免费评估版本,请访问Persists软件公司的web站点 http://www.persits.com/aspupload.html。这个组件的注册费用是$99.00(单CPU协议)。 常问到的问题 问: AspUpload能在所有ASP版本上工作吗? 答: 不.早期版本ASP的Request对象不提供BinaryRead或者TotalBytes方法,而本组件对这两个方法依赖很大。检验你的ASP版本是否允许上传的最好方法是执行象<% n = Request.TotalBytes %>这样一句简单的脚本,看你的ASP模块能否识别。 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 23:31 , Processed in 0.248505 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.