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