① 怎样打开ASP文件
打开ASP文件的方法有多种,其中使用“Macromedia Dreamweaver MX”软件或“Microsoft FrontPage”软件是较为常见的方式。如果你的电脑中安装了Offices办公软件,那么“Microsoft FrontPage”也作为选项之一。
在使用“Macromedia Dreamweaver MX”打开ASP文件时,首先需要在Dreamweaver中新建一个项目。然后在项目中导入你需要编辑的ASP文件。接下来,你可以使用Dreamweaver的编辑工具对ASP文件进行修改,完成后保存文件即可。
使用“Microsoft FrontPage”打开ASP文件的操作步骤更为简单。首先,打开FrontPage,点击“文件”菜单,选择“打开”,在弹出的对话框中选择需要编辑的ASP文件。之后,FrontPage会自动打开ASP文件,你可以直接在FrontPage中进行编辑,编辑完成后保存文件即可。
如果你的电脑中已经安装了Offices办公软件,那么“Microsoft FrontPage”就是你打开ASP文件的最佳选择。只需在FrontPage中打开需要编辑的ASP文件,进行编辑和修改,最后保存文件即可。
总的来说,使用“Macromedia Dreamweaver MX”或“Microsoft FrontPage”打开和编辑ASP文件都较为方便,只需选择适合你的软件进行操作即可。
② 怎样用asp实现图片上传到文件夹,路径保存在access数据库中
代码如下:
很简单的,自己修改一下局部就OK了
/uploadx.asp
<% Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) - 1)
'将上传的文件保存到path所指定的目录下面。
'Formfield 上传表单的"file"域名 Path
' 要保存文件的服务器绝对路径,形式为:"d:\path\subpath"或"d:\path\subpath\"
'MaxSize 限制上传文件的最大长度,以KByte为单位
' SavType 服务器保存文件的方式:
'0 唯一文件名方式,如果有同名则自动改名;
'1 报错方式,如果有同名则出错;
'2 覆盖方式,如果有同名则覆盖原来的文件
Function SaveFile(FormFileField, Path, MaxSize, SavType)
Dim StreamObj,StreamObj1
Set StreamObj = Server.CreateObject("ADODB.Stream")
Set StreamObj1 = Server.CreateObject("ADODB.Stream")
StreamObj.Mode = 3
StreamObj1.Mode = 3
StreamObj.Type = 1
StreamObj1.Type = 1
SaveFile = ""
StartPos = LenB(Divider) + 2
FormFileField = Chr(34) & FormFileField & Chr(34)
If Right(Path,1) <> "\" Then
Path = Path & "\"
End If
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormFileField) > 0 Then
FileName = bin2str(GetFileName(SearchStr,path,SavType))
If FileName <> "" Then
FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
FileLen = InStrB(StartPos, FormData, Divider) - 2 - FileStart
If FileLen <= MaxSize*1024 Then
FileContent = MidB(FormData, FileStart, FileLen)
StreamObj.Open
StreamObj1.Open
StreamObj.Write FormData
StreamObj.Position=FileStart-1
StreamObj.CopyTo StreamObj1,FileLen
If SavType =0 Then
SavType = 1
End If
StreamObj1.SaveToFile Path & FileName, SavType
StreamObj.Close
StreamObj1.Close
If SaveFile <> "" Then
SaveFile = SaveFile & "," & FileName
Else
SaveFile = FileName
End If
Else
If SaveFile <> "" Then
SaveFile = SaveFile & ",*TooBig*"
Else
SaveFile = "*TooBig*"
End If
End If
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function
'获取表单值
Function GetFormVal(FormName)
GetFormVal = ""
StartPos = LenB(Divider) + 2
FormName = Chr(34) & FormName & Chr(34)
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) - StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormName) > 0 Then
ValStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
ValLen = InStrB(StartPos, FormData, Divider) - 2 - ValStart
ValContent = MidB(FormData, ValStart, ValLen)
If GetFormVal <> "" Then
GetFormVal = GetFormVal & "," & bin2str(ValContent)
Else
GetFormVal = bin2str(ValContent)
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function
Function bin2str(binstr)
Dim varlen, clow, ccc, skipflag
skipflag = 0
ccc = ""
varlen = LenB(binstr)
For i = 1 To varlen
If skipflag = 0 Then
clow = MidB(binstr, i, 1)
If AscB(clow) > 127 Then
ccc = ccc & Chr(AscW(MidB(binstr, i + 1, 1) & clow))
skipflag = 1
Else
ccc = ccc & Chr(AscB(clow))
End If
Else
skipflag = 0
End If
Next
bin2str = ccc
End Function
Function str2bin(str)
For i = 1 To Len(str)
str2bin = str2bin & ChrB(Asc(Mid(str, i, 1)))
Next
End Function
Function GetFileName(str,path,savtype)
Set fs = Server.CreateObject("Scripting.FileSystemObject")
str = RightB(str,LenB(str)-InstrB(str,str2bin("filename="))-9)
GetFileName = ""
FileName = ""
For i = LenB(str) To 1 Step -1
If MidB(str, i, 1) = ChrB(Asc("\")) Then
FileName = MidB(str, i + 1, LenB(str) - i - 1)
Exit For
End If
Next
If savtype = 0 and fs.FileExists(path & bin2str(FileName)) = True Then
hFileName = FileName
rFileName = ""
For i = LenB(FileName) To 1 Step -1
If MidB(FileName, i, 1) = ChrB(Asc(".")) Then
hFileName = LeftB(FileName, i-1)
rFileName = RightB(FileName, LenB(FileName)-i+1)
Exit For
End If
Next
For i = 0 to 9999
hFileName = hFileName & str2bin(i)
If fs.FileExists(path & bin2str(hFileName) & i & bin2str(rFileName)) = False Then
FileName = hFileName & str2bin(i) & rFileName
Exit For
End If
Next
End If
Set fs = Nothing
GetFileName = FileName
End Function
%>
③ 详细介绍ASP.NET状态保存方法
ASP NET状态保存分为客户端保存和服务器端保存两种
使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服务器性能 因为对服务器资源的要求是适度的 但是 由于必须将信息发送到客户端来进行存储 因此对于以这种方式可以存储多少信息存在一定的客观限制
客户端保存的方式一般有如下 种
ViewState:
利用场合为 在对同一页的多个请求间自动保留值 多用于客户端的一些事件 典型利用场合为 页面信息重置 登陆出错次数统计 Grid列排序等
优点 不利用服务器端资源 实现简单 相对高的安全性 因为经过哈希计算和压缩 并且针对 Unicode 实现进行编码
缺点 因为ViewState存储在页面本身 所以无法存储较大的值 并且通过源文件可以看见其中的值 虽然经过哈希计算和压缩 但仍有被篡改的风险
可存储的类型 string integer bool array arr aylist hashtable以及其他可以序列化的类型
HiddenField:
利用场合为 存储少量页面 中经常改动的信息 多和客户端脚本一块使用 典型利用场合为 客户端经历一系列验证之后向服务器端回发 服务器端从客户端HiddenField中获取值 进行处理 例如 LeyserHomepage中 要删除一项产品 需要在客户端弹出确认Form 用户确认之后再PostBac k回服务器端进行数据库Delete操作 当用户确认要删除时 将当前要删除的产品ID存放到一个HiddenField中 然后执行 Form( ) submit回发到服务器端 服务器端再从HiddenField获取产品ID值 进行数据库操作
优点 不使用服务器资源 广泛支持 实现简单
缺点 安全性不高 因为它被包含在页面上进行发送 所以可以通过源文件看见他的内容 存储结构少 仅仅支持string integer bool array arraylis t等简单的数据结构 并且在其上只存放简单的单值 若要存放多值 需要额外编码 存储量少 因为它被存储在页面本身 所以 无法存储较大的值 而且大的数据量会受到防火墙和代理的阻止 注意 使用了HiddenField之后 需要回发到服务器进行 处理 应该使用Http Post方法而不是Http Get方法(通过URL请求访问)
Cookie:
利用场合为 存储少量页面中经常改动的信息 典型利用场合为 为登陆过的网站保存登陆用户名 为用户输入提供方便 还有在一些用户自定义项目上保存用户的个性化设置
优点 不使用服务器资源 实现简单 可配置到期时间
缺点 大小受到限制 一般浏览器支持的最大的Cookie 容量为 字节 客户端用户可能会配置为拒绝Cookie 安全性 保存在客户端的信息可能会被恶意用户修改或者获取 所以不应该保存敏感信息 持久性 保存期限受到客户端的配置影响
Cookie 通常用于 存取已知用户自定义内容的个性化情况 在大多数此类情况中 Cookie 是作为 标识 而不是 身份验证 所以在 Cookie 中只存 储用户名 账户名或唯一用户 ID(例如 GUID)并使用它来访问站点的用户个性化结构是足够的了
QueryString:
利用场合为 将信息从一页传递给另一页的最简单的方法
优点 不使用服务器资源 支持广泛 实现简单
缺点 安全性 因为直接在URL中暴露给用户 所以有被篡改的风险 容量有限 一般的浏览器都有 个字符的限制 只有在通过其 URL 请求页时查询字符串才是可行的选择 不能从已提交给服务器的页读取 查询字符串
视图状态:需要为将回发到自身的页存储少量信息 ViewState 属性的使用将提供具有基本安全性的功能
隐藏域 需要为将回发到自身或另一页的页存储少量信息 并且不需要较高的安全性 (客户端事件)只能在提交到服务器的页上使用隐藏域
Cookie 需要在客户端存储少量信息并且不需要较高的安全性 (个性化)
查询字符串 可以将少量信息从一页传输到另一页 并且不需要较高的安全性 (页面跳转 )只有在请求同一页 或通过链接请求另一页时 才能使用查询字符串
服务器端保存方式一般有如下 种
存储页信息的服务器端选项往往比客 户端选项具有更高的安全性 但它们可能使用更多的 Web 服务器资源 这可能在信息存储量较大时导致可缩放性问题
Application:
利用场合 所有的请求都会需要的 一些共有资源 由最先的一个请求率先获取之后 拿出来共享 其他的请求就不用浪费资源进行再次获取 典型利用场合 一个股市 Web 站点可能在一天中每 分钟从数据库获取大量的金融股票信息(也许是 MB 的数据) 然后将这些信息缓存在应用程序状态中 这样所有以后的查找请求都可以在应用程序状态中访问这些信息 其结果是极大地提高了每个 请求的性能 因为传入的请求不需要跨进程 跨计算机或数据库的往返过程
首次Http Get请求
If Not Me IsPostBack Then
先判断Application中是否已経有了缓存
If Application Item( Database ) Is Nothing Then
若没有 从DataCenter中获取
Dim ds As New DataSet
ds ReadXml(Server MapPath( TestData xml ))
Dim dv As New DataView(ds Tables( ))
拿到之后 缓存到Application 方便别的进程Http Get请求复用
Application Add( DataBase dv)
End If
Dim dv As DataView
dv = Application Item( DataBase )
缓存到Session 方便当前进程的Http Post请求
Session Add( DataBase dv )
End If
优点 易于实现 全局范围
缺点 持久性 若 保存数据的服务器端进程被强行关闭 那么数据就会丢失 所以利用Application一定要有保底的策略 有的话就使用 没有的话就自己拿 耗用服务器端的内存
注意 因为Application中的数据被多个进程公用 所以若需要更新其中的值时 需要利用 如下的语句 做到独占更新
Application Lock()
Application Item( DataBase ) = NewDataBase
Application UnLock()
Session:
利用场合 单独的一个进程内部使用 存储单独会话的短期的 敏感的数据
优点 易于实现 持久性 可以应对IIS重启和辅助进程重启 可在多进程中使用
缺点 耗用服务器端的内存
Database:
优点 安全性 容量 持久性 可靠性和数据完整性 可访问性 广泛支持
缺点 复杂 性能
方法 使用场合
应用程序状态 存 储更改不频繁的全局信息 这些信息由多个用户使用 此时安全性不成为问题 不要在应用程序状态中存储大量的信息
会话状态 存储特定于单独会话的短期信息 并且需要较高的安全性 不要在会话状态中存储 大量的信息 在支持许多用户的应用程序中 这可能会占用大量服务器资源并影响可缩放性
lishixin/Article/program/net/201311/13257
④ asp文件上传的问题!!急!!!
找一个无组件上传类.比如无惧上传类
<%
'----------------------------------------------------------------------
'转发时请保留此声明信息,这段声明不并会影响你的速度!
'******************* 无惧上传类 V2.2 ************************************
'作者:梁无惧
'网站:http://www.25cn.com
'电子邮件:[email protected]
'版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件
'发送一份给作者.并且保留作者此版权信息
'**********************************************************************
'----------------------------------------------------------------------
'----------------------------------------------------------------------
'文件上传类
Class UpFile_Class
Dim Form,File
Dim AllowExt_ '允许上传类型(白名单)
Dim NoAllowExt_ '不允许上传类型(黑名单)
Dim IsDebug_ '是否显示出错信息
Private oUpFileStream '上传的数据流
Private isErr_ '错误的代码,0或true表示无错
Private ErrMessage_ '错误的字符串信息
Private isGetData_ '指示是否已执行过GETDATA过程
'------------------------------------------------------------------
'类的属性
Public Property Get Version
Version="无惧上传类 Version V2.0"
End Property
Public Property Get isErr '错误的代码,0或true表示无错
isErr=isErr_
End Property
Public Property Get ErrMessage '错误的字符串信息
ErrMessage=ErrMessage_
End Property
Public Property Get AllowExt '允许上传类型(白名单)
AllowExt=AllowExt_
End Property
Public Property Let AllowExt(Value) '允许上传类型(白名单)
AllowExt_=LCase(Value)
End Property
Public Property Get NoAllowExt '不允许上传类型(黑名单)
NoAllowExt=NoAllowExt_
End Property
Public Property Let NoAllowExt(Value) '不允许上传类型(黑名单)
NoAllowExt_=LCase(Value)
End Property
Public Property Let IsDebug(Value) '是否设置为调试模式
IsDebug_=Value
End Property
'----------------------------------------------------------------
'类实现代码
'初始化类
Private Sub Class_Initialize
isErr_ = 0
NoAllowExt="" '黑名单,可以在这里预设不可上传的文件类型,以文件的后缀名来判断,不分大小写,每个每缀名用;号分开,如果黑名单为空,则判断白名单
NoAllowExt=LCase(NoAllowExt)
AllowExt="" '白名单,可以在这里预设可上传的文件类型,以文件的后缀名来判断,不分大小写,每个后缀名用;号分开
AllowExt=LCase(AllowExt)
isGetData_=false
End Sub
'类结束
Private Sub Class_Terminate
on error Resume Next
'清除变量及对像
Form.RemoveAll
Set Form = Nothing
File.RemoveAll
Set File = Nothing
oUpFileStream.Close
Set oUpFileStream = Nothing
if Err.number<>0 then OutErr("清除类时发生错误!")
End Sub
'分析上传的数据
Public Sub GetData (MaxSize)
'定义变量
on error Resume Next
if isGetData_=false then
Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
Dim sFormValue,sFileName
Dim iFindStart,iFindEnd
Dim iFormStart,iFormEnd,sFormName
'代码开始
If Request.TotalBytes < 1 Then '如果没有数据上传
isErr_ = 1
ErrMessage_="没有数据上传,这是因为直接提交网址所产生的错误!"
OutErr("没有数据上传,这是因为直接提交网址所产生的错误!!")
Exit Sub
End If
If MaxSize > 0 Then '如果限制大小
If Request.TotalBytes > MaxSize Then
isErr_ = 2 '如果上传的数据超出限制大小
ErrMessage_="上传的数据超出限制大小!"
OutErr("上传的数据超出限制大小!")
Exit Sub
End If
End If
Set Form = Server.CreateObject ("Scripting.Dictionary")
Form.CompareMode = 1
Set File = Server.CreateObject ("Scripting.Dictionary")
File.CompareMode = 1
Set tStream = Server.CreateObject ("ADODB.Stream")
Set oUpFileStream = Server.CreateObject ("ADODB.Stream")
if Err.number<>0 then OutErr("创建流对象(ADODB.STREAM)时出错,可能系统不支持或没有开通该组件")
oUpFileStream.Type = 1
oUpFileStream.Mode = 3
oUpFileStream.Open
oUpFileStream.Write Request.BinaryRead (Request.TotalBytes)
oUpFileStream.Position = 0
RequestBinDate = oUpFileStream.Read
iFormEnd = oUpFileStream.Size
bCrLf = ChrB (13) & ChrB (10)
'取得每个项目之间的分隔符
sSpace = MidB (RequestBinDate,1, InStrB (1,RequestBinDate,bCrLf)-1)
iStart = LenB(sSpace)
iFormStart = iStart+2
'分解项目
Do
iInfoEnd = InStrB (iFormStart,RequestBinDate,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iFormStart
oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sInfo = tStream.ReadText
'取得表单项目名称
iFormStart = InStrB (iInfoEnd,RequestBinDate,sSpace)-1
iFindStart = InStr (22,sInfo,"name=""",1)+6
iFindEnd = InStr (iFindStart,sInfo,"""",1)
sFormName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
'如果是文件
If InStr (45,sInfo,"filename=""",1) > 0 Then
Set oFileInfo = new FileInfo_Class
'取得文件属性
iFindStart = InStr (iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr (iFindStart,sInfo,""""&vbCrLf,1)
sFileName = Trim(Mid(sinfo,iFindStart,iFindEnd-iFindStart))
oFileInfo.FileName = GetFileName(sFileName)
oFileInfo.FilePath = GetFilePath(sFileName)
oFileInfo.FileExt = GetFileExt(sFileName)
iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr (iFindStart,sInfo,vbCr)
oFileInfo.FileMIME = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileStart = iInfoEnd
oFileInfo.FileSize = iFormStart -iInfoEnd -2
oFileInfo.FormName = sFormName
file.add sFormName,oFileInfo
else
'如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iInfoEnd
oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.CharSet = "gb2312"
sFormValue = tStream.ReadText
If Form.Exists (sFormName) Then
Form (sFormName) = Form (sFormName) & ", " & sFormValue
else
Form.Add sFormName,sFormValue
End If
End If
tStream.Close
iFormStart = iFormStart+iStart+2
'如果到文件尾了就退出
Loop Until (iFormStart+2) >= iFormEnd
if Err.number<>0 then OutErr("分解上传数据时发生错误,可能客户端的上传数据不正确或不符合上传数据规则")
RequestBinDate = ""
Set tStream = Nothing
isGetData_=true
end if
End Sub
'保存到文件,自动覆盖已存在的同名文件
Public Function SaveToFile(Item,Path)
SaveToFile=SaveToFileEx(Item,Path,True)
End Function
'保存到文件,自动设置文件名
Public Function AutoSave(Item,Path)
AutoSave=SaveToFileEx(Item,Path,false)
End Function
'保存到文件,OVER为真时,自动覆盖已存在的同名文件,否则自动把文件改名保存
Private Function SaveToFileEx(Item,Path,Over)
On Error Resume Next
Dim FileExt
if file.Exists(Item) then
Dim oFileStream
Dim tmpPath
isErr_=0
Set oFileStream = CreateObject ("ADODB.Stream")
oFileStream.Type = 1
oFileStream.Mode = 3
oFileStream.Open
oUpFileStream.Position = File(Item).FileStart
oUpFileStream.CopyTo oFileStream,File(Item).FileSize
tmpPath=Split(Path,".")(0)
FileExt=GetFileExt(Path)
if Over then
if isAllowExt(FileExt) then
oFileStream.SaveToFile tmpPath & "." & FileExt,2
if Err.number<>0 then OutErr("保存文件时出错,请检查路径,是否存在该上传目录!该文件保存路径为" & tmpPath & "." & FileExt)
Else
isErr_=3
ErrMessage_="该后缀名的文件不允许上传!"
OutErr("该后缀名的文件不允许上传")
End if
Else
Path=GetFilePath(Path)
dim fori
fori=1
if isAllowExt(File(Item).FileExt) then
do
fori=fori+1
Err.Clear()
tmpPath=Path&GetNewFileName()&"."&File(Item).FileExt
oFileStream.SaveToFile tmpPath
loop Until ((Err.number=0) or (fori>50))
if Err.number<>0 then OutErr("自动保存文件出错,已经测试50次不同的文件名来保存,请检查目录是否存在!该文件最后一次保存时全路径为"&Path&GetNewFileName()&"."&File(Item).FileExt)
Else
isErr_=3
ErrMessage_="该后缀名的文件不允许上传!"
OutErr("该后缀名的文件不允许上传")
End if
End if
oFileStream.Close
Set oFileStream = Nothing
else
ErrMessage_="不存在该对象(如该文件没有上传,文件为空)!"
OutErr("不存在该对象(如该文件没有上传,文件为空)")
end if
if isErr_=3 then SaveToFileEx="" else SaveToFileEx=GetFileName(tmpPath)
End Function
'取得文件数据
Public Function FileData(Item)
isErr_=0
if file.Exists(Item) then
if isAllowExt(File(Item).FileExt) then
oUpFileStream.Position = File(Item).FileStart
FileData = oUpFileStream.Read (File(Item).FileSize)
Else
isErr_=3
ErrMessage_="该后缀名的文件不允许上传"
OutErr("该后缀名的文件不允许上传")
FileData=""
End if
else
ErrMessage_="不存在该对象(如该文件没有上传,文件为空)!"
OutErr("不存在该对象(如该文件没有上传,文件为空)")
end if
End Function
'取得文件路径
Public function GetFilePath(FullPath)
If FullPath <> "" Then
GetFilePath = Left(FullPath,InStrRev(FullPath, "\"))
Else
GetFilePath = ""
End If
End function
'取得文件名
Public Function GetFileName(FullPath)
If FullPath <> "" Then
GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
Else
GetFileName = ""
End If
End function
'取得文件的后缀名
Public Function GetFileExt(FullPath)
If FullPath <> "" Then
GetFileExt = LCase(Mid(FullPath,InStrRev(FullPath, ".")+1))
Else
GetFileExt = ""
End If
End function
'取得一个不重复的序号
Public Function GetNewFileName()
dim ranNum
dim dtNow
dtNow=Now()
randomize
ranNum=int(90000*rnd)+10000
'以下这段由webboy提供
GetNewFileName=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum
End Function
Public Function isAllowExt(Ext)
if NoAllowExt="" then
isAllowExt=cbool(InStr(1,";"&AllowExt&";",LCase(";"&Ext&";")))
else
isAllowExt=not CBool(InStr(1,";"&NoAllowExt&";",LCase(";"&Ext&";")))
end if
End Function
End Class
Public Sub OutErr(ErrMsg)
if IsDebug_=true then
Response.Write ErrMsg
Response.End
End if
End Sub
'----------------------------------------------------------------------------------------------------
'文件属性类
Class FileInfo_Class
Dim FormName,FileName,FilePath,FileSize,FileMIME,FileStart,FileExt
End Class
%>
------------------------以下是类的使用说明
无惧上传类 - UpFile_Class V2.1 使用手册
作者:梁无惧 http://www.25cn.com [下载]
UpFile_Class 概述
自从用ASP来编写网站,就无时无刻想找一种兼容性强,使用方便的上传方法,用过很多的无 组件上传方法,但是都存在使用不方便,兼容性差,速度慢等的问题。终于在2003年的元旦里,想 到了可以让上传文件达到最快的方法,经过10天的努力,整整10个版本的版本的更新,终于完成了第一个“无惧上传类V1.0”,这个版本与其它的上传类或方法相比,具有速度快,兼容性强, 使用方便等特点。
经过整整一年,在得到各大网友的支持下,并且在长期使用中针对该版的不足,开发了1.1,1.2等版本,由于为了向下兼容,放弃了很多新的特性,现在,结过审慎考虑,终于在2004年7月10日完成了"无惧上传类2.0"版,该版相对于前作在安全上作出了最大的改进,在类内部实现了上传类型的黑白名单,更多方便了各种上传的环境,即使黑客突破了上传程序,但是最终在保存文件时会使他的所有努力付之流水,该版在使用上比前作更加方便,更人性化了。由于添加和修改了不少属性值,在移植上需要作出比较大的修改。
UpFile_Class 公共属性
File 文件域的集合,是一个Dictionary 对象,返回值一个FileInfo_Class 类。可读写。
Form 表单域的集合,是一个Dictionary 对象,返回对应表单域的值。可读写。
isErr 返回错误的数值。-1表示无错,1表示没有上传数据,2表示上传超出限制。只读。
Version 获取类的版本信息。只读。
AllowExt 白名单,允许上传的文件类型,可以在类文件里预设可上传的文件类型,以文件的后缀名来判断,不区分大小写,每个后缀名用“;”号分开。如AllowExt="jpg;rar;zip"。可读写。
NoAllowExt 黑名单,不允许上传的文件类型,可以在类文件里预设不可上传的文件类型,以文件的后缀名来判断,不区分大小写,每个后缀名用“;”号分开。如NoAllowExt="asp;htm;html;js;"。可读写
ErrMessage 错误信息,在发生错误时,可以调用ErrMessage显示错误的字符串信息。只读。
UpFile_Class 公共方法
GetData(MaxSize As Int64) 分析上传的数据。MaxSize为限制上传的字节,设为-1即不限制大小,此为过程,没有返回值,调用后调检查isErr是否大于0。
SaveToFile(Item As String,Path As String) 保存到文件,自动覆盖已存在的同名文件,Item为表单项名,Path为保存的绝对路径,返回值为保存的文件名。
AutoSave(Item As String,Path As String) 保存到文件,自动创建文件名以避免重复,Item为表单的名,Path为保存的绝对路径(可不包含文件名,如e:\wwwroot\upimg\),返回值为保存的文件名。
FileData(Item As String) 取得文件数据,Item为表单项名
GetFilePath(FullPath As String) 返回文件在路径,如GetFilePath("c:\a.asp") 返回值为"c:\"。
GetFileName(FullPath As String) 返回文件名,如GetFileName("c:\a.asp") 返回值为"a.asp"。
GetFileExt(FullPath As String) 返回文件的后缀名,如GetFileExt("c:\a.asp") 返回值为"asp"。
GetNewFileName() 返回一个以时间种子的不重复数值,可以用作文件名。
isAllowExt(Ext As String) 返回一个真假值指是Ext是否为可上传的类型,如isAllowExt("jpg")。
UpFile_Class 受保护方法
SaveToFileEx(Item As String,Path As String,Over As bool) 保存到文件,其中Over指示如果文件存在是否覆盖,如果OVER为真时,文件按PATH来保存,如果OVER为假,则自动调用 GetNewFileName() 生成一个新的不重复的文件名,以上传时的后缀名保存。
FileInfo_Class 概述
文件信息类,用来存贮上传的文件信息
FileInfo_Class 公共属性
FileName 返回上传的文件名。
FilePath 返回上传时文件在客户端的路径。
FileExt 返回文件扩展名。
FileMIME 返回文件MIME类别。
FileSize 返回文件大小(以字节为单位)。
Dictionary 对象 请参考VBSCRIPT帮助取得更详细的属性和方法
UPFILE_CLASS 特性
版本更新
0.96 第一个公开版本,以新的解析方法达到速度上的一个提升,修改稻香老农的无组件上传类,以达到完全兼容。
1.0 发现原版中一个无法避免的BUG,会导至黑客利用服务器在上传其间会占用100%CPU资源来达到拒绝服务攻击,故修改了原来的设用方法,增加一个GetData来在实际上传数据前对上传文件的大小进行判断,防止被上传超大文件。至于其它的改变,忘掉了。
1.2 修改了1.0中的一些错误命名(俺的英语不好),整理部分代码和加入更多对代码的注释。
2.0 更加稳定和更安全,加入了上传类型的黑白名单,自动保存,修改了文件类中的一个属性,原为FileType现在改为FileMIME,增加了几个常用的方法。
使用中的一些问题解答
1、什么时候用AutoSave和SaveToFile?
AutoSave是自动生成新的文件名以避免与服务器上的原文件同名,而SaveToFile则是覆盖存在的文件,所以,如果你上传的文件需要覆盖原文件的时候,那么就调用SaveToFile,如果你上传的文件不需要覆盖存在的文件,那么就调用AutoSave,该函数会返回所保存的文件名。
2、为什么不提供自全部保存?
我不太相信大家用上传类时不需要对文件进行处理,那么提供全部保存与分别保存并没有什么太大的区别,在能少不多的情况下,我没有加入这个功能。
3、为什么我保存的时候会提示“该类型不允许上传呢”?我没有执行判断啊!
这是因为程序内部进行了判断,为了防止由于外部调用代码的BUG而导至判断上传类型失效,在内部的保存和取得数据都自动进行了文件类型的判别,如果黑名单存在,则白名单不起作用,这是为了方便一些程序的使用,因为有些时间只需要禁止几个上传类型即可,而不需要对每个上传类型进行判别。
关于网友的一些问题
1、为什么上传的时候会出现无效页?
这是因为IE的BUG所导至的,目前尚没有更好的解决方法,原理是:当客户端提交表单时,IE会首先发把上传的总大小传到服务器,而这时服务器开始执行ASP代码,当运行到GetData方法时,会首先判断上传的总大小是为超过程序预设大小,如果没有,则开始执行上传,这时IE才真正开始上传数据,但是如果上传的总大小为超过程序预设大小,那么程序自动放弃读取并退出执行,这时上传并没有真正开始,虽然服务器返回了错误信息给IE,但是IE由于设计当初没有考虑到服务器会拒绝表单的上传,故IE会继续等待服务器的上传回应,由于服务器已经终止上传,IE就会以为服务器没有响应而出现无效页的错误了。
2、为什么从1.2马上升到了2.0?好像代码改得不多啊!
这是因为大家都喜欢高版本,我巴不得改为7.0呢,那样大家都会觉得这个版真高级。。。。-_-||
使 用 示 例
上传文件的表单要加入enctype="multipart/form-data"属性,即
<form name="form1" method="post" action="" enctype="multipart/form-data">
<input type="text" value="1" name="name">
<input type=file name="img">
<input type=submit name="submit" value="提交">
</form>
在执行上传的ASP页
'包含类文件
<!-- #include file="upfile_class.asp" -->
dim upfile
dim SaveFilename
'建立上传对象
set upfile=new upfile_class
'取得上传数据,限制最大上传10M 计算方法为 10240000/1000000=10.24M
upfile.GetData (10240000)
'判决是否出错
if upfile.isErr then
select case upfile.err
case 1
Response.Write "你没有上传数据呀???是不是搞错了??"
case 2
Response.Write "你上传的文件超出我们的限制,最大10M"
end select
else
'执行保存文件代码
upfile.SaveToFile "img","c:\"&upfile.file("img").filename
'执行自动保存文件代码,SaveFilename为保存的文件名
SaveFilename=upfile.AutoSave("img","c:\")
'销毁对像
set upfile=nothing
end if
⑤ 请问ASP.NET WebForm如何实现定时自动提交表单并保存到数据库,然后刷新页面并加载数据
1、建立一个一般处理程序(.ashx后缀),这程序里面写获取From表单的数据和提交的数据库
中的方法和一个获取最新插入数据的方法
2、使用HTML的定时触发,如:setTimeout
3、在定时触发的方法里面写一个Ajax来调用一般处理程序即可(这里可以用Ajax的from表单
提交)
$.ajax({
cache:true,
type:"POST",
url:ajaxCallUrl,//你的一般处理程序路径
data:$('#yourformid').serialize(),//你的formid
async:false,
error:function(request){
alert("Connectionerror");
},
success:function(data){
//回调获取插入数据的方法
}
});