又为ajax上传工具重新写了一个服务器端上传程序
作者:fanxiaojie 来源:韦伯花园的魔法师 发布时间:2009-12-21 14:30:00
之前写了一个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上传组件在这里:


猜你喜欢
- 目录项目介绍已有功能环境安装Windows用看这里ubuntu用户看这里使用方式:主要代码项目地址项目介绍可以下载doc,ppt,pdf.对
- 前言如果我们和面试官聊到事务的问题,怎么回答呢?先说下事务是什么,因为我们业务是比较复杂的,不可能一个sql就能解决的,涉及多个sql就组成
- 什么是聚类算法聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一
- 问题描述我在flask程序中,启动了另一个python程序-test.py:os.system('nohup python /opt
- 本文实例讲述了Vue 实现从小到大的横向滑动效果。分享给大家供大家参考,具体如下:最近项目中遇到一个需求,需要实现横向滑动,并且在滑动过程中
- 万维网联盟(W3C)发布了HTML 5规格说明书的草稿 ,这是自HTML 4在十多年前发布以来的第一个主要的修订版.在这期间,随着开发者逐渐
- 本文实例为大家分享了python绘制分组对比柱状图的具体代码,供大家参考,具体内容如下首先放效果图: # -*- co
- 最近,由于工作需要统计一下文本文档中的各种不同类字符的数量。将txt文本文档中包含的的中文、英文、数字等字符数量进行统计。这当然可以使用py
- 代码如下:Class template Private c_Char, c_Path, c
- ThinkPHP模板的in标签与range标签用于判断某个模板变量是否在某个范围之内。1.in标签ThinkPHP的in标签用于某个模板变量
- import pyperclipimport pyautogui# PyAutoGUI中文输入需要用粘贴实现# Py
- 在这个项目中,我们将创建一个停车位计数器。我们会发现总共有多少辆车,以及有多少停车位是空的。关于本教程最好的一点是,我们将使用基本的图像处理
- 👀前言代码出现异常而报错再正常不过了,但为什么要处理异常?由于异常的存在,代码运行时会出现一大堆的红色字体提示,对于程序员还好,见红色报错见
- 详解python里使用正则表达式的全匹配功能python中很多匹配,比如搜索任意位置的search()函数,搜索边界的match()函数,现
- 这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 8 - Input Filtering Part
- 一、PHP动态生成第一步:在PHP文件中直接写入JS代码,并在头部声明这是一个JavaScript文件<?php header(
- 话说本来我的电脑有个2000的数据库,去年我在那个电脑上新装了一个2005的数据库。前不久我买了台新电脑,装了数据库2008 将在旧电脑上的
- 那怎么开始设计一个合格的类呢,一开始就写class{}的都错了,正确的是什么都不写,而是假设这个类已经存在,这个对象已经存在,各种属性方法都
- 题目:如何在python中实现整数的二进制循环移位?概述在python中,可以通过<<以及>>运算符实现二进制的左移