学习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上传类