1、ASPupload的注册使用方法
如果你得到“AspEmail's premium features have expired”出错消息后请运行regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\Persits Software\AspEmail然后使用Regsvr32重新注册AspEmail using.然后你又可以接着用30天了
2、使用ASP实现文件上载(上传)的各种方法
最近做在做项目,涉及到文件上载的问题,找来资料研究了一下。当用户需要将文件传输到服务器上时,常用方法是使用FTP方式,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便。如果我们能把文件上载功能与Web集成,使用户仅用Web浏览器就能完成上载任务,这对于他们来说将是非常方便的。
网络上有很多介绍ASP上载文件的方法,归结起来有以下三大类实现方法,读者可以根据自己网站的条件和需求来选择合适的方法。
A、服务器组件上载方式:
该方法以SA-FileUp组件、AspUpload组件、lyfUpload组件为代表。
Software Artisans的SA-FileUp是最早的商业Active Server组件之一,几经改进,现在作为一个纯粹的ASP组件存在。Persits Software的ASPUpload也是一个功能很强大的COM组件。他们均实现了各种文件上载所需要的功能:上载大文件、限制上载文件的大小、上载多个文件、显示上载进度条、能够将文件保存到数据库中、……。
该类方法的优点是运行稳定,功能强大,对浏览器没有任何要求。其缺点就是需要在服务器上注册组件。如果网站管理员对服务器拥有管理权限,则该方法应该是实现文件上载的首选。
B、无组件上载方式:
该方法以化境无组件上传、无惧无组件上传、先锋无组件上传等为代表。
该方法是网络上应用最多最广的方法,并且有很多应用实例的源代码,其优点是对服务器和浏览器均没有任何要求,适应性强,应用范围广。但它也存在着一个缺点,上载文件的时候没有进度条的显示,并且IIS默认限制不允许上载超过200KB的文件(除非修改IIS的默认设置AspMaxRequestEntityAllowed)。
如果只需要上载小文件,则应该是首选方案。如果需要上载大文件,则需要网站管理员修改IIS的默认设置AspMaxRequestEntityAllowed。
C、浏览器组件上载方式:
该方法以XUpload组件、XUploadFiles组件、纵横HTTP文件上传组件为代表。
该方法在网络上应用相对要少一些,其优点是对服务器无要求,不需要在服务器上安装组件,并且能提供文件上载所需要的各种功能:上载大文件、限制上载文件的大小、上载多个文件、显示上载进度条、……。其缺点也比较明显,需要注册浏览器组件(在客户端)。该方法适用于需要上载大文件,而网站管理员对服务器没有管理权限的情况(如虚拟主机、租用空间等)。
• 各种上载方法横向比较结果:
服务器要求 浏览器要求 上传文件限制 上传时有无进度条 其他
SA-FileUp 安装组件 - 支持大文件,无限制 有进度条 需要有服务器控制权
AspUpload 安装组件 - 支持大文件,无限制 有进度条 需要有服务器控制权
lyfUpload 安装组件 - 支持大文件,无限制 无 需要有服务器控制权
化境无组件上传 - - 与IIS设置相关,
IIS默认设置最大200KB 无 通用,
适用小文件上载
无惧无组件上传 - - 与IIS设置相关,
IIS默认设置最大200KB 无 通用,
适用小文件上载
先锋无组件上传 - - 与IIS设置相关,
IIS默认设置最大200KB 无 通用,
适用小文件上载
XUploadFiles - 安装组件 支持大文件,无限制 有进度条 租用空间,
而需要上载大文件
纵横HTTP文件
上传组件 - 安装组件 支持大文件,无限制 有进度条 租用空间,
而需要上载大文件
转自:动态网制作指南 www.
3、各种组件上传实现方案:
A、 云游时使用的组件传送小文件:
需要组件:proUploadFile.dll
Set Upfile = Server.CreateObject("proUploadFile.UploadFile") '定义对象
If (Upfile.Filename <> "") Then
upfile.filesaveas(Server.MapPath("Courseware")&"\"&upfile.filename) '上传文件
'*****把上传后的文件进行更名操作*******
set fso = Server.Createobject("Scripting.FileSystemObject") '使用FileSystemObject对象
path = "Courseware\" &upfile.filename
path = server.mappath(path) '取得上传文件绝对Path
'**下面一句为新文件名的字符串:年_月_日-时_分_秒 + 原文件扩展名
strNewFileName = "Courseware\" & Year(Now) & "-" & Month(Now) & "-" & Day(Now) & "_" & Hour(Now) & "-" & Minute(Now) & "-" &second(Now) & "." & fso.GetExtensionName(path)
'**下面一句为原文件的绝对Path
sSourcePathFile = "Courseware\" & fso.GetFileName(path)
'**通过移动的方法实现文件更名(注:速度极快)
fso.movefile ""&Server.MapPath(sSourcePathFile) & "",""&Server.MapPath(strNewFileName)&""
End If
B、 XuploadFiles组件,有进度条,上传无限制文件,但需在客户端上安装组件
需要组件:XuploadFiles.mdb、XuploadFiles.asp、XuploadFiles.cab、XuploadFiles.js
‘***********************页面标记及上传文件设定*******************************
<META content="MSHTML 6.00.3790.0" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<form method="post" action="SectionAdd.asp?Method=UpLoad" onSubmit="return check_reply(UPLOADID,this);">
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、DoSomeThing()
‘上传文件框及按钮
<input name="filelist" id="filelist" type="text" class="input" size="10" maxlength="50" readonly="true" style=" " >
<input name="button2&
#34; type="button" onClick="UPLOADID.selectfile();" value="选择文件">
‘***********************页面标记及上传文件设定*******************************
‘**********************所需check_reply(oUpload, oForm) ************************
<script language="javascript">
function check_reply(oUpload, oForm)
{
if(!oUpload.isready ())
{
alert("您还没有选择需要上传的文件。");
return false;
}
//oUpload.setpath ("upresourcefile"); // 设置上传文件的路径
if(oUpload.uploadfile()=="") // 上传所选择的文件
return false;
}
</script>
‘**********************所需check_reply(oUpload, oForm) **********************
上传代码:
Dim namearray,count
namearray = Split(Request.Form("filelist"),"+") ' 多个文件名之间使用加号(+)分割
count = UBound(namearray)
'*****把上传后的文件进行更名操作
set fso = Server.Createobject("Scripting.FileSystemObject")
path = server.mappath(namearray(0)) ‘看此处如何取得上传文件名
C、 AspUpload,服务器注册组件,有进度条,上传文件无限制
需要组件:BAR.ASP、FRAMEBAR.ASP、MovieFile_Upload.asp、MovieUp.asp
相关AspUpload文献(安装AspUpload中的各个版本即可得到其中官方文献)
文件上传是将任意的文件从客户机发送到服务器的过程。最简单、最方便的上传方法是使用支持RFC1867的浏览器,如
微软的Internet Explorer4.0以上版本,Netscape3.0以上版本,或者带附件的Internet Explorer3.0。基于浏览器的文件上传是通过带有属性ENCTYPE="multipart/form-data"的HTML form实现的。这个form也必须包含一个或多个<INPUT TYPE=FILE>项,以让用户指定要上传的本地文件。
带有ENCTYPE="multipart/form-data"属性的form所发送的数据必须被一个服务器端过程解析,以展开上传的文件和其他非文件项。在ASP环境中,这种任务用编译好的active server组件能最好的完成,比如Persits软件公司的AspUpload
(http://www.persits.com">http://www.persits.com)。
本文所有示例都是建立在你的系统中安装了AspUpload的基础上的。可以在这里下AspUpload
免费评估版http://www.persits.com/aspupload.html">http://www.persits.com/aspupload.html。解压文件后,将AspUpload.dll
放在任意目录中,在MS DOS窗口中执行命令
regsvr32 c:dirAspUpload.dll
开始
我们来创建一个简单的能上传3个文件的HTML form,和控制上传的脚本。
这里是第一个HTML文件
Test1.htm:
<HTML>
<BODY BGCOLOR="#FFFFFF">
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp">
<INPUT TYPE=FILE SIZE=60 NAME="FILE1"><BR>
<INPUT TYPE=FILE SIZE=60 NAME="FILE2"><BR>
<INPUT TYPE=FILE SIZE=60 NAME="FILE3"><BR>
<INPUT TYPE=SUBMIT VALUE="Upload!">
</FORM>
</BODY>
</HTML>
每个 <INPUT TYPE=FILE> 项在浏览器中显示成为一个带有"Browse…"按钮的文本输入框。如果你没看见Browse按钮,很有可能说明你的浏览器不支持文件上传。
这里是相应的上传脚本 UploadScript1.asp:
<HTML>
<BODY>
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Count = Upload.Save("c:upload")
%>
<% = Count %> files uploaded.
</BODY>
</HTML>
ASP脚本的第一行仅仅创建了一个AspUpload对象的实例。第二行调用组件的Save方法,它实际上的作用是:它解析从浏览器发送的东西,计算出有多少个文件正在上传,并且把他们存在服务器上指定的目录。目录名可能以反斜线结束,也可能不是。所有文件将以他们原来的名字存放在目录中。我们很快将看到如何更改任意或者所有文件的名字。
Save方法返回成功上传的文件数量。万一发生错误,这个方法将抛弃之。
注意你能够使用我们的form中任意或者全部三个输入框。AspUpload有足够的智慧判断出哪些输入框使用了,哪些没有。
使用FILES和FORMS集合访问单个form项
我们看看第二组示例:
Test2.htm
<HTML>
<BODY BGCOLOR="#FFFFFF">
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript2.asp">
File 1:<INPUT TYPE=FILE NAME="FILE1">
Description 1:<INPUT TYPE=TEXT NAME="DESCR1"><BR>
File 2:<INPUT TYPE=FILE NAME="FILE2">
Description 2:<INPUT TYPE=TEXT NAME="DESCR2"><BR>
<INPUT TYPE=SUBMIT VALUE="Upload!">
</FORM>
</BODY>
</HTML>
UploadScript2.asp <HTML>
<BODY>
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save "c:upload"
%>
Files:<BR>
<%
For Each File in Upload.Files
Response.Write File.Name & "=" & File.Path & " (" & File.Size & ")<BR>"
Next
%>
<P>
Other items:<BR>
<%
For Each Item in Upload.Form
Response.Write Item.Name & "=" & Item.Value & "<
;BR>"
Next
%>
</BODY>
</HTML>
注意我们的HTML form现在有两种输入框,TYPE=FILE 和 TYPE=TEXT。因为我们form的ENCTYPE属性,我们不再能通过标准的ASP Response.Form 集合来访问form变量。此处Upload.Form 来解决了问题。这个集合实际上和Response.Form一样,也就是,我们能通过整形或字串型索引访问它的元素。例如:
Set Item1 = Upload.Form("DESCR1")
或者
Set Item1 = Upload.Form(1).
我们也能够使用上面示例代码显示的For-Each语句遍历集合中的项。Form集合包含FormItem类型的对象,它只有两个字串属性,Name 和 Value (缺省属性).
记住Upload.Form集合仅仅包含非文件项,也就是不同于<INPUT TYPE=FILE>,这点很重要。AspUpload提供另外一个集合,叫做Files,来包含UploadedFile类型的对象,这种对象代表已经上传的来自<INPUT TYPE=FILE>项的文件。很象Form集合,Files集合的项能够通过使用字串或者整形索引,或者一个For-Each语句访问,象上面的示例显示的一样。
运行示例2以后,我们将看到象这样的一些东西:
Files:
FILE1=c:uploadFile1.xls (108544)
FILE2=c:uploadFile2.zip (211687)
Other items:
DESCR1=bla bla
DESCR2=test test
注意我们已经通过UploadedFile对象相应的Path和Size属性获得了上传过的文件的目标路径和文件大小。
如果我们的form只包含一个文件输入框,<INPUT TYPE=FILE NAME="ONLYFILE">,那么没有必要使用For-Each语句。我们只需要这么说
Response.Write Upload.Files("ONLYFILE").Path
或者,更常用的
Response.Write Upload.Files(1).Path
要点:Files和Form集合在调用Save方法前都不会装入,因此在调用Upload.Save前就查询这些集合是不正确的。
' 错误!
Upload.Save( Upload.Form("Path") )
限制文件大小
也许你需要限制上传文件的大小,以防止服务器磁盘空间拥塞。你所需要做的一切就是在调用Save之前在你的Upload对象中调用SetMaxSize:
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.SetMaxSize 50000, False
Upload.Save "c:upload"
在这个例子中,我们将上传文件的大小限制在50000字节内。第二个可选参数指定超出文件最大范围的部分是否应该被删除(如果设成false或者不设),或者作为错误例外拒绝接收(如果设成True) 。
强制特有文件名
缺省的,AspUpload将覆盖上传路径中已有的文件。如果你不想这样,可以配置组件,为上传文件产生特有的名字来防止覆盖已有文件。方法是,在调用Save前设置上传管理器的OverwriteFiles属性:
Upload.OverwriteFiles = False
缺省值是true。
为防止名字冲突,AspUpload将在原来文件名后面加上用圆括号括起来的整数。例如,如果文件MyFile.txt已经存在于上传目录了,并且另外一个同名文件正在上传,AspUpload会将新文件存为 MyFile(1).txt。如果我们上传更多的MyFile.txt,他们将被存MyFile(2).txt, MyFile(3).txt,等等。
移动、拷贝、删除文件
文件上传对象提供了一些方法供你移动、拷贝或者删除上传的文件。这些方法是
file.Move( NewName As String )
file.Copy( NewLocation As String, Optional Overwrite)
file.Delete
根据NewName参数,Move方法将文件移动到其他目录或者给他更名。假设文件abc.txt上传到了目录
c:Upload。那么调用
file.Move "c:WINNTabc.txt" 将把文件移动到 c:WINNT, 而调用
file.Move "c:Uploadxyz.txt" 只会更改文件名。
要知道Move方法有个副作用是很重要的:当这个方法成功调用后,这个文件对象的Path属性将指向新目录/名字。
Copy属性把文件拷贝到新目录/名字。新目录必须是完全合法的路径。 Overwrite参数如果设成True或者不设,就会指示Copy方法覆盖新目录里的已有文件。 如果设成False,当文件在新目录中已经存在地时候,会导致方法失败。与Move方法不同,这个方法不会影响Path属性。
有时你可能选择使用Delete方法,例如你在把文件作为BLOBs存入数据库中,并且不再需要它放在你的上传路径里时。将文件存入数据库是我们下一个要讨论的主题。
把文件作为BLOBs存入数据库
许多数据库管理系统象Ms Access或者SQL Server将允许你将任意文件存为"binary large objects"(BLOBs)。一个MS Access表格能够在OLE Object型的数据字段中存放二进制文件。在SQL Server中,相应的数据类型是IMAGE。存放的文件以后能够重新取出供下载,或者用ADO显示。
AspUpload让你只使用短短一行代码就能把上传文件存入数据库!让我们看看第三组示例文件。文件 Test3.htm几乎和Test1.htm相同,因此我们不再把它显示在这里。文件UploadScript4.asp 很值得我们注意:
<HTML>
<BODY>
<%
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
%>
</BODY>
</HTML>
这一行
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;<other optional parameters>"
第二个参数是SQL Insert或者Update语
Windows 2003 建站技术 第三部分