网络编程
位置:首页>> 网络编程>> JavaScript>> 又为ajax上传工具重新写了一个服务器端上传程序

又为ajax上传工具重新写了一个服务器端上传程序

作者:fanxiaojie 来源:韦伯花园的魔法师 发布时间:2009-12-21 14:30:00 

标签:上传,ajax,工具,服务器

之前写了一个ajax上传工具。但是只是客户端的工具是我写的,服务器端的那个程序,我是修改了一个网上流传的无组件上传类。因为当时我还不懂什么adodb.stream什么的。但是我依然觉得它不够简洁。因为我知道它是可以一次性处理多个文件而且循环处理的。但是ajax上传工具一次只上传一个文件。为了让服务器资源能省的尽量省,我又不懈地研究,重新写了这么一个上传文件。把下面的代码保存为upload.asp吧:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%Option Explicit
Response.Buffer = True
response.charset = "gb2312"
Const uploadfolder="uploadpic"
Const allowExt="jpg,jpeg,gif,png,rar,doc,zip,xls,pdf,swf,avi,mp3,txt,htm,html"
Function BytestoStr(filestr)
 dim skipflag : skipflag = 0
 dim varlen,clow,i
 dim content : content = ""
 if not isnull(filestr) then
  varlen = lenb(filestr)
  for i=1 to varlen
   if skipflag=0 then
    clow = midb(filestr,i,1)
    if ascb(clow) > 127 then
     content = content & chr(ascw(midb(filestr,i+1,1) & clow))
     skipflag = 1
    else
     content = content & chr(ascb(clow))
    end if
   else
    skipflag = 0
   end if
  next
 end if
 BytestoStr = content
End Function
Function getFilepath(ext)
 dim folderpath,fso,filename
 folderpath=server.mappath(uploadfolder)
 set fso=server.createobject("Scripting.FileSystemObject")
 if Fso.FolderExists(folderpath)=false then fso.CreateFolder(folderpath)
 folderpath=folderpath&"\"&date()
 fileinfo=uploadfolder&date()
 if Fso.FolderExists(folderpath)=false then fso.CreateFolder(folderpath)
 filename=cstr(timer()*100)&"."&ext
 getFilepath=folderpath&"\"&filename
 fileinfo=fileinfo&"/"&filename
 set Fso=nothing
End Function
Function CheckExt(fileinfo)
 dim re
 set re=new regexp
 re.global=false
 re.ignorecase=true
 re.pattern="filename=""[^""]+\.(\w{2,4})"""
 if re.test(fileinfo)=false then
  response.write "{""err"":""\u4E0A\u4F20\u6587\u4EF6\u4E0D\u6B63\u786E"",""msg"":""""}"
  CheckExt=false
  set re=nothing
  exit function
 end if
 re.pattern="^[\s\S]+filename=""[^""]+\.(\w{2,4})""[\s\S]+$"
 Ext=re.replace(fileinfo,"$1")
 Ext=lcase(Ext)
 re.pattern="^("&replace(allowExt,",",")|(")&")$"
 if re.test(Ext)=false then
  response.write "{""err"":""\u6587\u4EF6\u7C7B\u578B\u4E0D\u6B63\u786E"",""msg"":""""}"
  CheckExt=false
 else
  CheckExt=true
 end if
 set re=nothing
End Function
If Request.serverVariables("request_method")="POST" then
 if Request.TotalBytes>204800 then
  response.write "{""err"":""\u6587\u4EF6\u592A\u5927\u4E86\2C\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u8D85\u8FC7200K"",""msg"":""""}"
  response.end
 end if
 dim oStream,oBinary,istart,iseparate,ifinish,ilength,bcrlf,sStream,fileinfo,filepath,ext
 bcrlf=ChrB(13)&ChrB (10)
 set oStream=server.createobject("adodb.stream")
 oStream.Type = 1
 oStream.Mode = 3
 oStream.Open
 oBinary=Request.BinaryRead (Request.TotalBytes)
 oStream.write oBinary
 istart=instrb(oBinary,bcrlf&bcrlf)+3
 iseparate=leftb(oBinary,instrb(oBinary,bcrlf)-1)
 fileinfo=leftb(oBinary,istart-4)
 fileinfo=BytestoStr(fileinfo)
 if CheckExt(fileinfo)=false then
  oStream.close
  set oStream=nothing
  response.end
 end if
 filepath=getFilepath(ext)
 set sStream=server.createobject("adodb.stream")
 sStream.Type = 1
 sStream.Mode = 3
 sStream.Open
 ifinish=instrb(istart,oBinary,iseparate)-3
 ilength=ifinish-istart
 oStream.position=istart
 oStream.Copyto sStream,ilength
 sStream.savetofile filepath,2
 sStream.close
 oStream.close
 set sStream=nothing
 set oStream=nothing
 response.write "{""err"":"""",""msg"":"""&fileinfo&"""}"
End If
%>

这个上传程序,上面有两个参数可以手工修改,一个是上传文件夹,另一个是允许上传的文件格式。它会把上传的文件按日期分存到不同的文件夹里,如果该文件夹不存在,则自动创建。然后文件名是当前时间的厘秒数加扩展名。命名方式其实可以按自己的意愿重新写过的。改那个getfilepath函数就好了。

那个ajax上传组件在这里:

https://www.aspxhome.com/download/2009/12104.htm

0
投稿

猜你喜欢

  • 在IE6中背景属性加 a 与 a:hover 两者的伪类结合,在正常逻辑下为何不起作用?测试这问题存在IE6及以下浏览器,这问题我经常遇到在
  • 页面重构需要考虑的一个重点是XHTML代码语义化,就算是在无任何CSS样式修饰的情况下也能给他人在阅读时带来便利,甚至可以夸张点说在搜索引擎
  • 大家都熟悉迅雷看看里面的电影人气指数这个小图标吧先看看我的效果图再看看迅雷的截图比较好看,是根据电影的人气指数来显示热度,下面我们就来模仿一
  • 我不知道有多少人在使用浏览器的书签,这东东有时候实在是很有用的,比如现在说到的jQuerify书签。jQuerify书签的功能很简单,那就是
  • 什么是存储过程呢?定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程
  • 内容摘要:本文介绍了使用js来实现下拉伸缩导航菜单的功能,并带有渐显的效果,值得收藏。正好这几天公司不忙,学校又没有事情,所以想抽空架一个个
  • 你家中的CD、VCD一定很多吧?是不是常遇到为找一张CD把一抽屉的碟子翻得乱七八糟的情况,你一定没少受埋怨——你不想整理它们一下?如:影片是
  • 经常有网友会问,SQL Server占用了太多的内存,而且还会不断的增长;或者说已经设置了使用内存,可它没有用到那么多,这是怎么一回事儿呢?
  • 前言:书终于完稿了,我也有了一些自己的时间,于是决定将书中讲到的一些比较常见的知识点整理出来,发在Blog里面。当然也不会完全发表出来,毕竟
  • 如何在约定时间显示特定的提示信息?<%Function Greeting()    
  • jquery作为一款高质量的框架被大多web开发者所推崇。jquery也的确是一款伟大的产品,在实际开发中明显提高了效率。但是任何产品并不是
  • 调用数据库存储过程见下:<%Set Dataconn = Server.CreateObject(&qu
  • 作者: Alan Pearce原文: Multi-Column Layouts Climb Out of the Box地址: http:/
  • 使用字符串建立查询能加快服务器的解析速度吗?我记的在那儿看过,好像是说使用字符串建立SQL查询是有它的道理的,像这样:<%mySQL=
  • 阅读上一篇:微软建议的ASP性能优化28条守则(4)技巧 13:避免重新确定数组的维数 应尽量避免 Redim 数组。就性能而言,如果计算机
  • 在html里的每一个标签都有其自身的意义,而H标签作为标题标签,它的意义更是至关重要。对于H标签的用法特别是h1的用法一直是个争议的问题,也
  • 学习一些你已经知道的知识也没有什么坏处,是吧?我知道这可能并不一定非常有意义,但是很多时候我们往往知其然而不知其所以然,这会使得事情出现惊人
  • 众所周知IE6不支持position:fixed,这个bug与IE6的双倍margin和不支持PNG透明等bug一样臭名昭著。前些天我做自己
  • 1. 横排往下会影响阅读速度。如12345678的单排单列数字,肯定是竖排阅读快。但多行多列的整块信息,横排并不见得就比竖排慢,比如所有简体
  • 在做网站产品展示页面时,一般会用到缩略图,好处当然是直观醒目让人一目了然。点击进入然后看到大图及具体的介绍。但是缩略图在实现上带来了两个问题
手机版 网络编程 asp之家 www.aspxhome.com