学习python时写的一个asp上传类

前段时间对python很感兴趣,在asp里配置了python脚本,试着写了一个文件上传的类出来.

class _upload:
	"""
	python写的asp文件上传类,很简单,因为python比vbs强大多了 :D
	"""
	def __init__(self):
		self.form={}
		self.file={}
		self.maxsize=8*1024*1024	#最大允许上传2M
		self.singlesize=2*1024*1024	#单文件最大允许大小
		self.allowtype='|jpg|gif|png|bmp|doc|psd|'	#允许上传的文件类型
		self.err=0
	
	def getdata(self):
		"开始获取上传内容"
		if Request.TotalBytes>self.maxsize:
			self.cError(1)
			return 0

		b=str(Request.BinaryRead(Request.TotalBytes)[0])
		br='\r\n'

		#获取form分割符
		q=b[0:b.find(br)]
		bt=b.split(q)
		for i in bt:
			if len(i)>10:
				sindex=i.find('name="')+6
				pname=i[sindex:i.find('"',sindex)]
				sindex=i.find('filename="')+10
				if sindex>10:
					fname=self.fname(i[sindex:i.find('"',sindex)])
					sindex=i.find(br+br)+4
					ftype=self.ftype(fname)
					fcont=i[sindex:len(i)-2]
					#文件无内容
					if len(fcont)<1:
						self.cError(4)
						continue
					#文件大小超过预定值
					if self.singlesize<len(fcont):
						self.cError(2)
						continue

					if self.allowtype.find('|'+ftype+'|')>-1:
						self.file[pname]=_upfile(fname,ftype,fcont)
					#文件类型不在预定值范围
					else:
						self.cError(3)
				else:
					sindex=i.find(br+br)+4
					if self.form.has_key(pname):
						self.form[pname]+=', '+i[sindex:len(i)-2].decode('utf-8')
					else:
						self.form[pname]=i[sindex:len(i)-2].decode('utf-8')
	
	def get(self,pname):
		"获取表单值"
		if self.form.has_key(pname):
			return self.form[pname]
		else:
			return ''

	def save(self,pname,path=''):
		"保存文件,成功返回文件名"
		if self.file.has_key(pname):
			if self.file[pname].save(path)==True:
				return self.file[pname].name
			else:
				return 0
		else:
			return 0
	
	def fname(self,path):
		path=path.decode('utf-8')
		i=path.replace(r'/','\\').rfind('\\')
		if i>-1:
			return path[i+1:]
		else:
			return path

	def ftype(self,path):
		i=path.rfind(r'.')
		if i>0:
			return path[i+1:].replace('|','').lower()
		else:
			return ''

	def cError(self,num):
		"错误处理"
		self.err=num
		self.description=(u'未知的错误',u'上传内容过大',u'上传文件过大',u'未允许上传的文件类型',u'上传文件无内容')[num]

class _upfile:
	"""
	文件类
	"""
	def __init__(self,fname,ftype,fcont):
		self.name=fname
		self.type=ftype
		self.size=len(fcont)
		self.cont=fcont
	
	def save(self,path=''):
		if path=='':
			path=Server.MapPath(r'./')+r'/'+self.name
		try:
			open(path,'wb').write(self.cont)
			return True
		except:
			return False

下面是源码包,感兴趣的朋友不妨测试一下,给俺指点指点

python上传类