




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
无惧上传类上传路径问题修改本人在一次开发中碰到图片无法上传问题,经调试找出无惧类里面有个地方有点问题。问题描述:图片上传报错问题解释:无惧类里面是用tmpPath=Split(Path,.)(0) 获取上传路径及文件名,问题就出在split上。我服务器路径命里面有个.,由于split是截取数组,而这里是用截取后数组0下表这个变量和文件后缀拼接,这样就拼接不成完整的路径和文件名。解决方法:我用tmpPath=left(Path,InStrRev(Path,.)-1) 这个来代替split 获取路径和文件名,这样就获取到了完整的路径及文件名。如果有朋友能有更好的解决方法请与本人分享,谢谢! 本人QQ:289060636再此本人感谢此无惧上传类的作者梁无惧的分享!1,DatePart(m,strDate),0&DatePart(m,strDate)temp=replace(temp,dd,iif(len(DatePart(d,strDate)1,DatePart(d,strDate),0&DatePart(d,strDate)temp=replace(temp,hh,iif(len(DatePart(h,strDate)1,DatePart(h,strDate),0&DatePart(h,strDate)temp=replace(temp,nn,iif(len(DatePart(n,strDate)1,DatePart(n,strDate),0&DatePart(n,strDate)temp=replace(temp,ss,iif(len(DatePart(s,strDate)1,DatePart(s,strDate),0&DatePart(s,strDate)DateFormat=tempelseDateFormat=falseend ifend functionFunction CreateFolder(FolderPath)dim lpath,fs,f lpath=Server.MapPath(FolderPath) Set fs=Server.CreateObject(Scri&pting.File&Sys&temObject) If not fs.FolderExists(lpath) then response.Write(lpath):response.End() Set f=fs.CreateFolder(lpath) CreateFolder=F.Pathend if Set F=Nothing Set fs=Nothing End Function Function moveFile(oldfile,newfile)dim fs Set fs=Server.CreateObject(Scri&pting.File&Sys&temObject) fs.movefile Server.MapPath(oldfile),Server.MapPath(newfile) Set fs=NothingEnd Function -转发时请保留此声明信息,这段声明不并会影响你的速度!* 无惧上传类 V2.2 xheditor特别修改版*作者:梁无惧网站:电子邮件:版权声明:版权所有,源代码公开,各种用途均可免费使用,但是修改后必须把修改后的文件发送一份给作者.并且保留作者此版权信息*-文件上传类Class UpFile_ClassDim Form,FileDim AllowExt_允许上传类型(白名单)Dim NoAllowExt_不允许上传类型(黑名单)Dim IsDebug_ 是否显示出错信息PrivateoUpFileStream上传的数据流Private isErr_错误的代码,0或true表示无错Private ErrMessage_错误的字符串信息Private isGetData_指示是否已执行过GETDATA过程-类的属性Public Property Get VersionVersion=无惧上传类 Version V2.0End PropertyPublic Property Get isErr错误的代码,0或true表示无错isErr=isErr_End PropertyPublic Property Get ErrMessage错误的字符串信息ErrMessage=ErrMessage_End PropertyPublic Property Get AllowExt允许上传类型(白名单)AllowExt=AllowExt_End PropertyPublic Property Let AllowExt(Value)允许上传类型(白名单)AllowExt_=LCase(Value)End PropertyPublic Property Get NoAllowExt不允许上传类型(黑名单)NoAllowExt=NoAllowExt_End PropertyPublic Property Let NoAllowExt(Value)不允许上传类型(黑名单)NoAllowExt_=LCase(Value)End PropertyPublic Property Let IsDebug(Value)是否设置为调试模式IsDebug_=ValueEnd Property-类实现代码初始化类Private Sub Class_InitializeisErr_ = 0NoAllowExt=.asp:.php黑名单,可以在这里预设不可上传的文件类型,以文件的后缀名来判断,不分大小写,每个每缀名用;号分开,如果黑名单为空,则判断白名单NoAllowExt=LCase(NoAllowExt)AllowExt=白名单,可以在这里预设可上传的文件类型,以文件的后缀名来判断,不分大小写,每个后缀名用;号分开AllowExt=LCase(AllowExt)isGetData_=falseEnd Sub类结束Private Sub Class_Terminateon error Resume Next清除变量及对像Form.RemoveAllSet Form = NothingFile.RemoveAllSet File = NothingoUpFileStream.CloseSet oUpFileStream = Nothingif Err.number0 then OutErr(清除类时发生错误!)End Sub分析上传的数据Public Sub GetData (MaxSize) 定义变量on error Resume Nextif isGetData_=false then Dim RequestBinData,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfoDim sFormValue,sFileNameDim iFindStart,iFindEndDim iFormStart,iFormEnd,sFormName代码开始If Request.TotalBytes 0 Then 如果限制大小If Request.TotalBytes MaxSize ThenisErr_ = 2如果上传的数据超出限制大小ErrMessage_=上传的数据超出限制大小!OutErr(上传的数据超出限制大小!)Exit SubEnd IfEnd IfSet Form = Server.CreateObject (Scripting.Dictionary)Form.CompareMode = 1Set File = Server.CreateObject (Scripting.Dictionary)File.CompareMode = 1Set tStream = Server.CreateObject (ADODB.Stream)Set oUpFileStream = Server.CreateObject (ADODB.Stream)if Err.number0 then OutErr(创建流对象(ADODB.STREAM)时出错,可能系统不支持或没有开通该组件)oUpFileStream.Type = 1oUpFileStream.Mode = 3oUpFileStream.Open oUpFileStream.Write Request.BinaryRead (Request.TotalBytes)oUpFileStream.Position = 0RequestBinData = oUpFileStream.ReadDim sHtml5FileInfosHtml5FileInfo=Request.ServerVariables(HTTP_CONTENT_DISPOSITION)If sHtml5FileInfo Then针对Html5上传特别修正iFindStart = InStr (1,sHtml5FileInfo,name=,1)+6iFindEnd = InStr (iFindStart,sHtml5FileInfo,1)sFormName=Trim(Mid(sHtml5FileInfo,iFindStart,iFindEnd-iFindStart)iFindStart = InStr (iFindStart,sHtml5FileInfo,filename=,1)+10iFindEnd = InStr (iFindStart,sHtml5FileInfo,1)sFileName = Trim(Mid(sHtml5FileInfo,iFindStart,iFindEnd-iFindStart)Set oFileInfo = new FileInfo_ClassoFileInfo.FileName = GetFileName(sFileName)oFileInfo.FilePath = GetFilePath(sFileName)oFileInfo.FileExt = GetFileExt(sFileName)oFileInfo.FileStart = 0oFileInfo.FileSize = Request.TotalBytesoFileInfo.FormName = sFormNamefile.add sFormName,oFileInfoElseiFormEnd = oUpFileStream.SizebCrLf = ChrB (13) & ChrB (10)取得每个项目之间的分隔符sSpace = MidB (RequestBinData,1, InStrB (1,RequestBinData,bCrLf)-1)iStart = LenB(sSpace)iFormStart = iStart+2分解项目DoiInfoEnd = InStrB (iFormStart,RequestBinData,bCrLf & bCrLf)+3tStream.Type = 1tStream.Mode = 3tStream.OpenoUpFileStream.Position = iFormStartoUpFileStream.CopyTo tStream,iInfoEnd-iFormStarttStream.Position = 0tStream.Type = 2tStream.CharSet = utf-8sInfo = tStream.ReadText取得表单项目名称iFormStart = InStrB (iInfoEnd,RequestBinData,sSpace)-1iFindStart = InStr (22,sInfo,name=,1)+6iFindEnd = InStr (iFindStart,sInfo,1)sFormName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)如果是文件If InStr (45,sInfo,filename=,1) 0 ThenSet oFileInfo = new FileInfo_Class取得文件属性iFindStart = InStr (iFindEnd,sInfo,filename=,1)+10iFindEnd = InStr (iFindStart,sInfo,&vbCrLf,1)sFileName = Trim(Mid(sinfo,iFindStart,iFindEnd-iFindStart)oFileInfo.FileName = GetFileName(sFileName)oFileInfo.FilePath = GetFilePath(sFileName)oFileInfo.FileExt = GetFileExt(sFileName)iFindStart = InStr (iFindEnd,sInfo,Content-Type: ,1)+14iFindEnd = InStr (iFindStart,sInfo,vbCr)oFileInfo.FileMIME = Mid(sinfo,iFindStart,iFindEnd-iFindStart)oFileInfo.FileStart = iInfoEndoFileInfo.FileSize = iFormStart -iInfoEnd -2oFileInfo.FormName = sFormNamefile.add sFormName,oFileInfoelse如果是表单项目tStream.ClosetStream.Type = 1tStream.Mode = 3tStream.OpenoUpFileStream.Position = iInfoEnd oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2tStream.Position = 0tStream.Type = 2tStream.CharSet = utf-8sFormValue = tStream.ReadTextIf Form.Exists (sFormName) ThenForm (sFormName) = Form (sFormName) & , & sFormValueelseForm.Add sFormName,sFormValueEnd IfEnd IftStream.CloseiFormStart = iFormStart+iStart+2如果到文件尾了就退出Loop Until (iFormStart+2) = iFormEnd if Err.number0 then OutErr(分解上传数据时发生错误,可能客户端的上传数据不正确或不符合上传数据规则)End ifRequestBinData = Set tStream = NothingisGetData_=trueend ifEnd Sub保存到文件,自动覆盖已存在的同名文件Public Function SaveToFile(Item,Path)SaveToFile=SaveToFileEx(Item,Path,True)End Function保存到文件,自动设置文件名Public Function AutoSave(Item,Path)AutoSave=SaveToFileEx(Item,Path,false)End Function保存到文件,OVER为真时,自动覆盖已存在的同名文件,否则自动把文件改名保存Private Function SaveToFileEx(Item,Path,Over)On Error Resume NextDim FileExtif file.Exists(Item) thenDim oFileStreamDim tmpPathisErr_=0Set oFileStream = CreateObject (ADODB.Stream)oFileStream.Type = 1oFileStream.Mode = 3oFileStream.OpenoUpFileStream.Position = File(Item).FileStartoUpFileStream.CopyTo oFileStream,File(Item).FileSizetmpPath=Split(Path,.)(0) 这样截取数组会有问题,如果路径里面的文件夹名有.的话,就会获取不到完整的路径tmpPath=left(Path,InStrRev(Path,.)-1) 从右截取字符FileExt=GetFileExt(Path)if Over thenif isAllowExt(FileExt) thenoFileStream.SaveToFile tmpPath & . & FileExt,2if Err.number0 then OutErr(保存文件时出错,请检查路径,是否存在该上传目录!该文件保存路径为 & tmpPath & . & FileExt)ElseisErr_=3ErrMessage_=该后缀名的文件不允许上传!OutErr(该后缀名的文件不允许上传)End ifElsePath=GetFilePath(Path)dim forifori=1if isAllowExt(File(Item).FileExt) thendofori=fori+1Err.Clear()tmpPath=Path&GetNewFileName()&.&File(Item).FileExtoFileStream.SaveToFile tmpPathloop Until (Err.number=0) or (fori50)if Err.number0 then OutErr(自动保存文件出错,已经测试50次不同的文件名来保存,请检查目录是否存在!该文件最后一次保存时全路径为&Path&GetNewFileName()&.&File(Item).FileExt)ElseisErr_=3ErrMessage_=该后缀名的文件不允许上传!OutErr(该后缀名的文件不允许上传)End ifEnd ifoFileStream.CloseSet oFileStream = NothingelseErrMessage_=不存在该对象(如该文件没有上传,文件为空)!OutErr(不存在该对象(如该文件没有上传,文件为空)end ifif isErr_=3 then SaveToFileEx= else SaveToFileEx=GetFileName(tmpPath)End Function取得文件数据Public Function FileData(Item)isErr_=0if file.Exists(Item) thenif isAllowExt(File(Item).FileExt) thenoUpFileStream.Position = File(Item).FileStartFileData = oUpFileStream.Read (File(Item).FileSize)ElseisErr_=3ErrMessage_=该后缀名的文件不允许上传OutErr(该后缀名的文件不允许上传)FileData=End ifelseErrMessage_=不存在该对象(如该文件没有上传,文件为空)!OutErr(不存在该对象(如该文件没有上传,文件为空)end ifEnd Function取得文件路径Public function GetFilePath(FullPath) If FullPath Then GetFilePath = Left(FullPath,InStrRev(FullPath, ) Else GetFilePath = End IfEnd function取得文件名Public Function GetFileName(FullPath) If FullPath Then GetFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 37946.2-2025有机发光材料测试方法第2部分:热学性能
- 小轿车买卖合同4篇
- 2024-2025学年山西省忻州市七年级(下)第一次月考数学试卷(含答案)
- 0-3岁婴幼儿游戏知到智慧树答案
- 风险投资对科技创新企业孵化的影响分析
- 户外拓展活动总结15篇
- 2025年续签商业店铺租赁合同
- 2024年秋新北师大版数学一年级上册教学课件 第五单元 有趣的立体图形 综合实践 记录我的一天
- 管道安装过程中的安全防护
- 风电场施工人员培训方案
- 2025年秋季学期第一次中层干部会议上校长讲话:凝心聚力明方向沉心落力干实事
- 广西2025年公需科目学习考试试题及答案4
- 代加工板材合同协议书范本
- 2025年事业单位工勤技能-湖南-湖南地质勘查员二级(技师)历年参考题库含答案解析(5卷)
- 肝炎的分型及护理
- 高中语文38篇课内文言文挖空一遍过(教师版)
- 2025年高考真题物理(四川卷)-2
- 企业负责人财税知识培训
- 【前程无忧】2025校招人才素质洞察白皮书
- 船舶制造公司管理制度
- 2025至2030年中国石油化工自动化仪表产业发展动态及未来趋势预测报告
评论
0/150
提交评论