虚拟主机问题之虚拟主机Asp无组件文件上传到租用服务器空间的实例

合集下载

化境ASP无组件上传类 - upload_5xsoft 使用手册

化境ASP无组件上传类 - upload_5xsoft 使用手册

化境ASP无组件上传类 - upload_5xsoft 使用手册目录1.关于 upload_5xsoft2.运行平台与注意事项2.类的成员与对象3.使用示例关于 upload_5xsoft一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,大多解决法就是安装第三方上传组件。

可第三方组件有很多问题,有的组件要注册,有的组件要在表单中加上他的版权信息。

还有的就是组件的兼容问题。

在网上也流传了很多无组件上传的代码,但都是只能上传文本文件,或是只能将文件上传到数据库中。

我这段时间在研究ASP,发现可以不用第三方组件上传任意类型的文件。

就写了这个类,给大家一个方便,整个类放在一个文件中: upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示例程序,可以直接使用。

申明:源代码是完全开放的,可能随意传播,但请保留其完整性,未经作者同意,不得用于商业。

运行平台与注意事项a)只能运行于 Windows2000+IIS 5,不支持 NT4+IIS4 或是 Win98+PWS, 只要在ASP中加上: <!--#include FILE="upload_5xsoft.inc"--> 就行了b) 在使用文件上传时, 表单 form 要加上 enctype="multipart/form-data" 即:<form name="form1" method="post" action="" enctype="multipart/form-data"><input type="text" value="abc" name="text1"><input type=file name="file"><input type=submit name="submit" value="提交"></form>upload_5xsoft的对象如定义一个上传对象<!--#include FILE="upload_5xsoft.inc"--><%set upload=new upload_5xsoft 'upload就是一个对象%>upload_5xsoft 对象成员file 文件对象集,(是个dictionary对象)文件对象成员:Count 属性,文件表单的个数FileName 属性,上传文件的名字FileSize 属性,上传文件的大小(为0是表示没有文件)FilePath 属性,上传前文件所在的路径FormName 属性,文件表单的名字SaveAs 方法,储存上传后文件,有一个参数,路径要为真实路径如:例子: set file=upload.file("file1") 'file1为表单名response.write "<br>文件名:"&file.FileNameresponse.write "<br>文件大小:"&file.FileSizeresponse.write "<br>文件路径:"&file.FilePathfile.saveAs Server.mappath("/1.jpg")form 表单数据集,(是个dictionary对象)用来代替 Request.Formcount 属性,表单数exists 方法,检查是否有指定的表单名更多的用法可看 vbscript 的dictionary对象帮助例子:'得到text1表单的数据,uplaod就是一开始创建的对象sText=upload.form("text1")Version 属性,upload_5xsoft类的版本号,如:response.write upload.Version使用示例1.上传一个jpg文件的示例:文件1: upload.htm<html><title>example</title><body><form name="form1" method="post" action="upload.asp" enctype="multipart/form-data"><input type=file name="file1"><input type=submit name="submit" value="提交"></form></body></html>文件2: upload.asp<html><title>example</title><body><!--#include FILE="upload_5xsoft.inc"--><%set upload=new upload_5xsoftset file=upload.file("file1")if file.fileSize>0 thenfile.saveAs Server.mappath("temp.jpg")response.write "<br>上传文件:"&file.FileName&" => temp.jpg OK!"response.write "<br>文件大小:"&file.FileSizeend ifset upload=nothing%></body></html>2.列表出有文件表单(多文件上传)<html><title>example</title><body><!--#include FILE="upload_5xsoft.inc"--><%set upload=new upload_5xsoftfor each formName in upload.fileset file=upload.file(formName)if file.FileSize>0 thenfile.SaveAs Server.mappath(file.FileName)response.write file.FilePath&file.FileName&" ("&file.FileSize&") => " response.write file.FileName&" 成功!<br>"end ifset file=nothingnextset upload=nothing%>你还可能直接使用作者写好了的上传程序在example目录中立即下载若程序有问题,请写作者联系 getc@-----------------------------------------------------------------------------------------------------------------------------稻香老农[ASP]利用稻香老农的无组件上传类进行多文件上传本例使用稻香老农的无组件上传类进行多文件和表单项的混合上传。

ASP 无组件上传文件

ASP  无组件上传文件

ASP 无组件上传文件在网站设计时,我们经常需要从本地向服务器上传文件,现在有很多ASP上传组件,在本章中介绍了AspUpload组件和LyfUpload组件的使用,知道他们必须在服务器上注册。

本案例将介绍无需任何组件支持的无阻件上传程序,并且能反映出上传的进度,缺点是不支持大文件的上传和安全性不高。

本案例中包括四个文件,filepath用于存放上传的图片,uploadfile.htm用于提交要上传的文件,saveupload.as p为处理用户提交后的页面,upload.asp为库文件存储无阻件上传类和函数。

本案例中主要利用了ASP中的ADODB.Stream对象实现文件的上传。

难点在于理解类和函数的定义,以及对二进制数据流的操作。

(1)新建一个名为filepath的文件夹,本例所有文件夹将存在该文件夹下。

下(2)saveupload.asp文件用于处理uploadfile.htm文件提交过来的数据,该文件用到的函数都存放在包含文件upload.asp中,首先定义充许上传的格式、文件的大(3)下面将要对该文件对提交过来的数据进行验证,如果正确才上传文件。

首先验证文件的大小是否超出了限制。

(4)接下来验证文件的格式是否为我们充许上传的文件格式。

(6)因为Request.BinaryRead方法在一个页面中只能使用一次,所以就放在函数外面读取,在每个函数中都可以使用,下面获取上传的数据。

此时表单信息和文件信息都混合在一起传了过来,其实就是一个长长的二进制字符串。

我们首先就是(7)接下来写一个函数来获取上传的文件的信息,可以将上传的文件保存到指定文件夹中,FormName表示表单中文件选择框的名字,该函数返回一个数组,保存客户端路径、文件名称、文件扩展名、MIME类型、文件大小信息,如果发生错(8)获取完文件的信息,我们就可以对该文件进行保存工作了。

FormName表示表单中文件选择框的名字,SaveFilePath为保存路径,filename为新的文件名,O verWriteFlag表示是否允许覆盖,True表示允许覆盖,False表示不允许覆盖'该函数返回值,0表示发生错误,1表示正常,2表示名字重复,3表示根本没有选择文件。

主机无组件上传文件为何无法使用?

主机无组件上传文件为何无法使用?

主机无组件上传文件为何无法使用?有的用户上传组件被认为是病毒而删除,包括动网论坛的upload文件,原因是近期asp木马泛滥,upload代码本身存在安全因患,被大多数的杀毒软件认定是病毒,建议解决方法如下:1:不要使用“无惧上传类”这段代码,以避免不必要的麻烦2:一定要使用的,修改相关代码(具体修改方法见下)3:使用容大互联提供的上传组件以下是“容大互联关于无组件上传类被认为是病毒的公告”供参考。

最近发现不少上传组件被认为是病毒而杀掉,具体表现为客户论坛名为upload.inc,upload_fun.asp的文件被认为是病毒文件而杀掉,具体原因是因为国内很多论坛程序使用了名为“无惧上传类”的一段通过ado.stream组件上传的代码。

这段代码被不少安全机构认为是对于Web服务器有恶意威胁,自从五月起将其归类为backdoor.sinups 恶意程序而查杀。

具体安全公告请参阅所谓“无组件上传”,是指通过Windows服务器内建ADO.Stream对象实现的一种文件上传方式,一般用于客户的图片,文件等Web上传程序,相对于其他上传方式来说,无组件上传没有特殊的组件要求,但是其上传功能是继承自asp内部对象,上传功能不是非常稳定,对于asp 脚本执行时间有较高要求,并对于上传大小有一定限制。

因此,容大互联虚拟主机服务器虽然支持此功能,但更推荐客户使用我们提供的ASPUpload上传组件。

使用aspupload可以使您站点的上传功能更为稳定,健壮。

对于aspupload,目前使用中的绝大多数程序都可以支持,只需要将您的站点程序设置为使用aspupload上传功能即可。

并请客户不要使用“无惧上传类”这段代码,以避免不必要的麻烦。

据说关于动网论坛的upload文件的解决方法:将upload.inc文件内的以下代码:Dim 'RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo改成:Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart Dim oFileInfo。

asp无组件上传文件

asp无组件上传文件

asp无组件上传文件所谓“无组件上传文件”,就是不使用第三方组件,直接上传文件。

它是非常复杂的,可是为什么本节还要花一定的篇幅讲解呢?原因有二:(1)如果使用别人的服务器,对方可能不允许你安装第三方组件,就必须使用无组件上传;(2)学习无组件上传,就可以对文件上传的原理有深刻了解,有助于大家理解AspUpload等组件到底是怎么工作的,甚至可以动手开发属于自己的文件上传组件。

要掌握无组件上传,其实最为重要的是学会分析客户端传上来的数据,为此将首先在此讲述无组件上传原理,随后会举一些综合示例。

1. 无组件上传原理细心的同学可能已经注意到,不管是用AspUpload组件还是LyfUpload组件,上传表单文件都是一样的。

这也就提醒我们,用户将文件提交到服务器端的时候都是一样的,区别就是服务器端得到数据后,用什么方法来分析得到其中的文件名称、文件大小、文件内容、文件说明等信息。

所谓无组件上传,就是要我们自己来手工获取这些信息。

下面就分步讲解:(1)剖析上传数据的格式要对上传的数据进行分析,就必须知道上传数据的格式。

其实在<form>标记中增加enctype="multipart/form-data"属性后,上传的数据是一个长长的二进制字符串,其中包括了文件浏览框的名称、文件的客户端路径、文件MIME类型、文件内容、文本框(文件说明)的名称、文本框的值等各种信息。

就好比是邮局送到学校来的一个大邮包,其中包含了信件、包裹、汇款单、报刊等各种东西,学校收发室就要将这些东西挑出来送给相应的人。

二进制字符串是无法直接显示在页面上的,如果非要直接显示,将会看到一堆乱码,但是我们可以将二进制字符串先转换为文本字符串,然后再显示到页面上。

以本示例为例,假如客户选择了文件“C:\temp.jpg”,并且填写了文件说明“我的照片”,提交后,将二进制字符串转换为文本字符串,结果如图所示:上传数据格式说明:①首先要强调,提交上来的数据是一个二进制数据,将来我们需要处理的也是二进制数据。

基于Asp的无组件文件上传技术

基于Asp的无组件文件上传技术

1|上传的具体数据信息 … } . ・
… … … … … … … … … … … 一
7 17 2 d 3 a  ̄4 C n e t s o ii f r d t c o tn — p st n: o m— aa; H / e Di o at i
7 7a 8 — dl 3 2f 4c —
功能的实现大多是 采用 了具 体的上传组件 , 往往需要编写 复杂的程序或 者下载 、 购买相应 的组件 , 因而 有一定的局限性; 笔者在使用 A p s 技术进行仓库通用软件开发平 台信息系统开发过程中 , 综合 了多方面 问题的考虑 , 使用 了无组件上传技术 , 并对此作了一些理论和实践上的探讨与研究 。
且上传数据也并非仅 仅包含上 传文件 的具体数据信息 , 同时也包含 了客户端上传页面的一些格式信息。 假设 用 A p s 技术 已经上传了一个 w r 文件给 We 服务器, od b 通过 R s os 的 Bn rWr e ep ne i y i 方法 可把 a t 上传的数据取出到浏览 器中显 示, 得到如下的结果 :












由此可得到上传数据 , 它包 含 了一些控 制信息 , 可划分 为三部分 : 数据头 、 数据 正文 、 据尾 . 数 而实 际需 要的是数据 正文部分 , 这就需 要编 制相应 的程序把头尾数据去掉 , 实施 中需要借助于头尾的相关 在
总 后 司 令部 资 助 顷 目 f 自 2 0 】0 司 0 1 13J
1 工 作 原 理
通过浏览器上传文件至服务器 , 就不能不提及 R C 8 6 F 7 建议的规范 …: J 首先在上传的 H ml f 页面中

asp将本地的文件上传到服务器

asp将本地的文件上传到服务器

asp将本地的⽂件上传到服务器今天我们讲解如何利⽤asp的上传功能将本地的⽂件上传到服务器上。

最简系统包括下⾯三个⽂件:upload.htm --上传⼝⽂件,选择本地⽂件uploadimg.asp --上传程序控制⽂件upload_5xsoft.inc --⽆组件上传类,此⽂件初学者不⽤学习,只要会⽤就可以了upload.htm内容————上传⼝⽂件,选择本地⽂件<html><head></head><body><table width="80%" border="0" align="center"><form name="form1" method="post" action="uploadimg.asp" enctype="multipart/form-data"><tr><td align="center"><input name="upfile" type="file" id="upfile"></td></tr><tr><td align="center"><input type="submit" name="Submit" value="上传图⽚"></td></tr></form></table></body></html>uploadimg.asp内容————上传程序控制⽂件<!--#include FILE="upload_5xsoft.inc"--><%dim upload,file,filepathfilepath="UPLOAD/"set upload=new upload_5xSoft ''建⽴上传对象for each formName in upload.file ''列出所有上传了的⽂件set file=upload.file(formName) ''⽣成⼀个⽂件对象if file.FileSize>0 then ''如果 FileSize > 0 说明有⽂件数据fname = file.filenamefile.SaveAs Server.mappath(filepath&fname) ''保存⽂件end ifset file=nothingnextset upload=nothing ''删除此对象upload_5xsoft.inc内容————此⽂件内容不属于本演练程序内容,本演练应⽤此类的⽅法<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>dim oUpFileStreamClass upload_5xSoftdim Form,File,VersionPrivate Sub Class_Initializedim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfodim iFileSize,sFilePath,sFileType,sFormvalue,sFileNamedim iFindStart,iFindEnddim iFormStart,iFormEnd,sFormNameVersion="⽆组件上传类 Version 0.93"set Form=Server.CreateObject("Scripting.Dictionary")set File=Server.CreateObject("Scripting.Dictionary")if Request.TotalBytes<1 then Exit Subset tStream = Server.CreateObject("adodb.stream")set oUpFileStream = Server.CreateObject("adodb.stream")oUpFileStream.Type = 1oUpFileStream.Mode =3oUpFileStream.OpenoUpFileStream.Write Request.BinaryRead(Request.TotalBytes)Response.Write "<font size=""2"">页⾯执⾏时间:"&FormatNumber((Timer() -time1)*1000,3)&"毫秒</font><br>" oUpFileStream.Position=0RequestBinDate =oUpFileStream.ReadiFormStart = 1iFormEnd = LenB(RequestBinDate)bCrLf = chrB(13) & chrB(10)sStart = MidB(RequestBinDate,1, InStrB(iFormStart,RequestBinDate,bCrLf)-1) iStart = LenB (sStart)iFormStart=iFormStart+iStart+1while (iFormStart + 10) < iFormEndiInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3tStream.Type = 1tStream.Mode =3tStream.OpenoUpFileStream.Position = iFormStartoUpFileStream.CopyTo tStream,iInfoEnd-iFormStarttStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"sInfo = tStream.ReadText'取得表单项⽬名称iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)iFindStart = 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'取得⽂件名iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10iFindEnd = InStr(iFindStart,sInfo,"""",1)sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)oFileInfo.FileName=getFileName(sFileName)oFileInfo.FilePath=getFilePath(sFileName)'取得⽂件类型iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14iFindEnd = InStr(iFindStart,sInfo,vbCr)oFileInfo.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)oFileInfo.FileStart =iInfoEndoFileInfo.FileSize = iFormStart -iInfoEnd -3oFileInfo.FormName=sFormNamefile.add sFormName,oFileInfoelse'如果是表单项⽬tStream.ClosetStream.Type =1tStream.Mode =3tStream.OpenoUpFileStream.Position = iInfoEndoUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-3tStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"sFormvalue = tStream.ReadTextform.Add sFormName,sFormvalueend iftStream.CloseiFormStart=iFormStart+iStart+1wendRequestBinDate=""set tStream =nothingEnd SubPrivate Sub Class_Terminateif not Request.TotalBytes<1 thenform.RemoveAllfile.RemoveAllset form=nothingset file=nothingoUpFileStream.Closeset oUpFileStream =nothingend ifEnd SubPrivate function GetFilePath(FullPath)If FullPath <> "" ThenGetFilePath = left(FullPath,InStrRev(FullPath, ""))ElseGetFilePath = ""End IfEnd functionPrivate function GetFileName(FullPath)If FullPath <> "" ThenGetFileName = mid(FullPath,InStrRev(FullPath, "")+1)ElseGetFileName = ""End IfEnd functionEnd ClassClass FileInfodim FormName,FileName,FilePath,FileSize,FileType,FileStartPrivate Sub Class_InitializeFileName = ""FilePath = ""FileSize = 0FileStart= 0FormName = ""FileType = ""End SubPublic function SaveAs(FullPath)dim oFileStream,ErrorChar,iSaveAs=1if trim(fullpath)="" or right(fullpath,1)="/" then exit functionset oFileStream=CreateObject("Adodb.Stream")oFileStream.Type=1oFileStream.Mode=3oFileStream.OpenoUpFileStream.position=FileStartoUpFileStream.copyto oFileStream,FileSizeoFileStream.SaveToFile FullPath,2oFileStream.Closeset oFileStream=nothingSaveAs=0end functionEnd Class</SCRIPT>此⽂所诉的内容是上传⽂件的最简化程式,请朋友们⾃⼰分析⼀下,学会本演练,asp⼀般的上传功能就基本掌握了。

虚拟主机常见错误和解决

虚拟主机常见错误和解决

网站程序常见有400,和500 之类的错误. 其中以400-410 之间的错误是客户端错误(和动态程序无关).例如404 表示用户访问了一个不存在的网页等. 500错误是服务器端错误,也就是用户程序(Asp,,Php等)错误或者网站配置错误.需要程序员根据错误检查程序.以下是常见错误解决方法:现在总结用户在使用虚拟主机时常见的错误和相应的故障排除方法1. 缺少默认首页.错误信息如下Directory Listing DeniedThis Virtual Directory does not allow contents to be listed.原因:用户删除了网站默认首页(index.htm,index.asp,index.php 等),导致网页无法显示.解决:重新上传默认首页,您也可以在用户中心设定默认首页.2. 404错误: 访问网站显示,无法找到网页:无法找到该页您正在搜索的页面可能已经删除、更名或暂时不可用。

原因:用户删除了WWW目录,或者用户访问页面不存在解决:重新创建WWW目录.并重新上传文件3.网页打开后,图片无法正常显示. 显示:原因: 由于用户没有上传图片或者图片路径不对导致图片无法正常显示.解决: 上传图片到指定的位置(在图片上点击鼠标右键->"属性" 查看图片的路径和文件名,然后通过Ftp上传文件到服务器的相应目录中)500错误:ASP程序常见错误和解决1. 500错误:访问asp网页出现以下错误:原因: 这是Asp程序常见错误提示.说明您的asp程序有问题.您要查看详细错误信息才能够确定到底是asp程序哪里出现了错误.解决: 在IE工具栏选择"工具"->"Internet 选项"->"高级"-> 取消"显示友好Http 错误信息". 然后重新刷新网页就可以看到详细错误信息.修改后刷新原页面就会提示程序具体错误:Active Server Pages 错误'ASP 0116'丢失脚本关闭分隔符/a.asp,行12. Asp 连接Access 数据库错误,错误信息如下:Microsoft OLE DB Provider for ODBC Drivers 错误'80004005'[Microsoft][ODBC Microsoft Access Driver]常见错误不能打开注册表关键字'Temporary (volatile) Jet DSN for process 0x1588 Thread 0x1260 DBC 0xb1e4f44 Jet'。

ASP无组件上传

ASP无组件上传

无组件上传·从原理剖析到实践无组件上传一直是困扰大家的一个问题。

其实原理很简单,核心就是分析字符串。

但是,实际操作时,却困难重重。

其中的关键问题还是大家往往对原理的剖析不够深入,或者是因为过程过于繁琐,导致bug不断。

一直以来,都想做一个完善的例子,只不过想想就头痛,加上没时间(借口,呵呵),所以没有付诸行动。

今天就咬咬牙,给大家提供一个完整的无组件上传的例子。

因为本人耐性不好,所以咱们一点一点来,分几天完成。

未来的几天,我会天天更新这个文档,这个过程也是大家学习和提高的过程。

(完整的源码和示例,可以在这里找到:/asp/attach/A0000006.zip)==============================================================第一天:认识我们的解剖对象——数据上传文件时,首先要知道我们得到的是什么。

下面是一个上传文件的表单,我们就从他开始。

<form action="doupload.asp" method=post enctype="multipart/form-data">file1说明:<input type=text name=file1_desc> &nbsp;file1<input type=file name=file1><br>file2说明:<input type=text name=file2_desc> &nbsp;file2<input type=file name=file2><br><input type=submit name=upload value=upload></form>表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。

asp无组件上传示例(自己写的)

asp无组件上传示例(自己写的)

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无组件上传样例</title></head><body><form id="up_file" name="up_file" enctype="multipart/form-data" method="post"><input type="file" name="file" /><input type="text" name="intro" value="地不收" /><input type="submit" name="Submit" value="提交" /></form><%dim file_size,file_datafile_size=request.TotalBytesif file_size<>0 thenfile_data=request.BinaryRead(file_size)'response.Write(file_size)'response.Write(BinaryToString(file_data))dim paremator,markmark=chrb(13)&chrb(10)paremator=leftb(file_data,instrb(file_data,mark)-1)'response.Write(BinaryToString(paremator)&"<p>")dim temp_url,temp_url_start,temp_url_enddim str01,str02,str03,str03_start,str04,str04_startstr01=StringToBinary("Content-Disposition: form-data; name=""")str02=StringToBinary("""; filename=""")str03=paremator&mark&str01str03_start=instrb(file_data,str03)+lenb(str03)temp_url_start=instrb(str03_start,file_data,str02)+lenb(str02)str04=leftb(file_data,temp_url_start)str04_start=instrb(file_data,str04)+lenb(str04)temp_url_end=instrb(str04_start,file_data,mark)-2temp_url=BinaryToString(midb(file_data,temp_url_start,temp_url_end-temp_url_start+1)) response.Write(temp_url&"-客户端路径<p>")dim temp_nametemp_name=mid(temp_url,instrrev(temp_url,"\")+1)response.Write(temp_name&"-客户端文件名<p>")dim content_start,content_end,content_lencontent_start=InstrB(temp_url_start,file_data,mark&mark)+4 '定位到文件内容所在的第1个字符content_end=InstrB(content_start,file_data,paremator)-3 '定位到文件内容的最后一个字符content_len=content_end-content_start+1dim stream01,stream02set stream01=server.CreateObject("adodb.stream")stream01.type=1stream01.openstream01.write file_dataset stream02=server.CreateObject("adodb.stream")stream02.type=1stream02.openstream01.position=content_start-1stream01.copyto stream02,content_lenstream02.savetofile server.MapPath(temp_name),2'------------------------------------------------------------------------------------------------'该函数可以将二进制字符串转换成文本字符串Function BinaryToString(thedata)'变量strNow表示正在处理的字符,strTemp用来保存已经处理完毕的字符串'变量flag是一个标志,False表示前一个字符不是中文,True表示前一个字符是中文Dim strNow,strTemp,flag,Iflag=False'利用循环依次转换每一个字符For I=1 To LenB(thedata)'因为一个中文字符包括两个字节,如果flag=True,表示前一个字符是中文,所以'要跳过该字符,需要令标志flag=False。

基于ASP的无组件的文件上传研究

基于ASP的无组件的文件上传研究

基于ASP的无组件的文件上传研究摘要:本文讨论了在B/S模式下服务器端不使用组件的情况下,如何利用纯ASP,VBscript来实现WEB用户上传文件。

关键字:文件上传无组件VBscriptASP一、前言文件上传是ASP编程中最常用的功能。

目前使用ASP技术将客户端的文件信息上传到服务器主要有两种方法:第一种方法是在服务器端安装一个文件上传组件,然后在ASP 代码中创建该组件的对象以实现文件的上传,但是这种方法必须允许客户在服务器上安装组件,这样服务器的安全得不到保障,不适合免费个人主页空间;第二种方法是使用ASP内建对象实现无组件文件上传,这种方法不需要在服务器上安装组件,在一定程度上保证了服务器的安全性。

在使用ASP无组件文件上传时由于编写ASP无组件上传代码有一定的困难,故本文将讨论无组件文件上传技术实现的原理和方法。

二、数据分析用户在客户端主要通过表单将数据发送到服务器端,采用格式如下:enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。

”multipart/form-data”的意思是设置表单的MIME编码。

默认情况下,表单数据会编码为”appli cation/x-www-form-urlencoded”。

这个编码不能用于文件上传;只有使用了”multipart/form-data”,才能完整的传递文件数据。

下面举个例子(test.txt,内容为:“这里是test文档!”)。

在服务器环境下运行以上的代码。

action=“upload.asp”当提交表单时,向服务器端”upload.asp”处发送表单数据。

当upload.asp代码为如下时候:上传的数据是一个二进制字符串,其中包括了文件浏览框的名称、文件的客户端路径、文件MIME类型、文件内容、文本框(文件说明)的名称、文本框的值等各种信息,服务器端接收到的数据转化为文本字符串形式如下:-----------------------------7daf5211202ce Content-Disposition: form-data; name=“upfile”; filename=“test.txt” Content-Type: text/plain 这里是test文档!-----------------------------7daf5211202ce Content-Disposition: form-data; name=“submit” 立即上传-----------------------------7daf5211202ce—以上数据中“-----------------------------7daf5211202ce”是分隔符,它将服务器端收到的数据分成若干块,每一块都对应着客户端的一个表单项目,分析以上数据我们可以发现二个数据块。

asp上传文件代码详解

asp上传文件代码详解

asp上传文件代码详解一、无组件上传的原理我还是一点一点用一个实例来说明的吧,客户端HTML如下。

要浏览上传附件,我们通过<input type="file">元素,但是一定要注意必须设置form的enctype 属性为"multipart/form-data":<form method="post" action="upload.asp"enctype="multipart/form-data"><label><input type="file" name="file1" /></label><br /><input type="text" name="filename" value="default filename"/><br /><input type="submit" value="Submit"/><input type="reset" value="Reset"/></form>在后台asp程序中,以前获取表单提交的ASCII 数据,非常的容易。

但是如果需要获取上传的文件,就必须使用Request对象的BinaryRead方法来读取。

BinaryRead方法是对当前输入流进行指定字节数的二进制读取,有点需要注意的是,一旦使用BinaryRead 方法后,再也不能使用Request.Form 或Request.QueryString 集合了。

结合Request对象的TotalBytes 属性,可以将所有表单提交的数据全部变成二进制,不过这些数据都是经过编码的。

ASP无组件上传技术分析

ASP无组件上传技术分析
於 肇 鹏
( 阳职 业技 术 学 院 ,辽 宁 辽 阳 1 1 0 ) 辽 1 0 4
摘 要 : 阐述 AS P技 术 中通 过 无 组件 方 式 实 现 文件 上 传 管 理 的 原 理 及 方 法 , 并进 一 步 阐述 在 文 件 上 传 过
程 中 一 些特 殊 要求 的处 理 方 法 和 原 则 . 关 键 词 :AS P技 术 ; 无 组 件 上 传 ;分 析 ;R C 87 F 1 6
s t Da a e t

( q e t ToaBye ) Re u s. tl ts
建 立 第 二 个 缓 冲 池 ,用 于 单 独 保 存 文 件
s t t te m = S r e . Crae jc ( ” a o b e S ra evr e tOb t e dd.
sra ” tem )
收稿 日期 :2 1一 O — 1 01 4 O
作者简介 :於 肇鹏 (9 9 ) 1 7 - ,男 ,辽 宁辽 阳市人 ,讲师 ,主要从事计算机软件 开发与应用方 面研究
於 肇 鹏
A P无 组 件 上 传技 术 分 析 S
4 3
‘ 序 代 码 片段 程 建 立 第 一 个 缓 冲 池 ,用 于 接 收用 户 传 来 的 数 据
1 规 定 H ML网页表 单 内容 格式 T
要 在 HTML网页 中实 现上 传 , 必须 要在 <fr o m>标 签 中加 入 如下 代码 ,以保证上 传 文件 以二进 制 形 式传 输 .
ENC TYPE= l p r/o m- d t' mut a tf r - a a i
R C 8 7中已经规 定 ,在 R q et F 16 e u s 对象 中所 有 数 据通 过 特 定 的 边 界进 行 分 隔. 通 过 对上 传 数 据 的解 读 ,可 以发现 ,在所 有 的表单 项 目进 行 提 交 的时 候 ,分 隔 的方 式 是 固定 的 ,或者 说 ,R C建 议 采 用 相 同 F 的分 隔字 符对不 同 的表单 项 目进行 区分 .在 数 据 的实际 传输 过 程 中 ,采 用 “ 填充 字 符 + 换行 符 + 回车 符” 的方 式对 表单项 目的内容进 行 分 隔[ .也 就 是说 ,只要 找到 二进 制数 据 中相应 的换 行 回车 ,就可 以找到 数 2 ]

asp.net中文件如何上传到服务器上

asp.net中文件如何上传到服务器上

中文件如何上传到服务器上using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;namespace SuAn{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void Button1_Click(object sender, EventArgs e){if (this.filepost.PostedFile.FileName == ""){Response.Write("上传文件不能为空!");return;}try{string Path = Server.MapPath("upload/");//设置服务器端路径string filePath = this.filepost.PostedFile.FileName;//获取客户端实际路径string fileName = filePath.Substring(stIndexOf("\\")+1);//获取文件名称string serverPath = Path + fileName;//上传的文件保存到服务器端的路径System.Text.StringBuilder buider = new System.Text.StringBuilder();//上传的文件信息:可变字符串buider.Append("上传文件的类型:"+this.filepost.PostedFile.ContentType.ToString()+"");buider.Append("客户端文件地址:"+this.filepost.PostedFile.FileName+"");buider.Append("上传文件名称:"+fileName);buider.Append("上传文件的扩展名:"+filePath.Substring(stIndexOf(".")+1));buider.Append("上传文件的大小:"+this.filepost.PostedFile.ContentLength/1024+"k"+"");if (System.IO.File.Exists(serverPath)){Response.Write("这个文件在服务器上已经存在,请不要重复上传!");return;}string str = fileName.Substring(stIndexOf(".")+1);//获取文件后缀名if (str == "jpg" || str == "rar" || str == "ppt"){Response.Write("对不起,该类型文件不能被上传!");return;}if (this.filepost.PostedFile.ContentLength >2048){Response.Write("对不起,文件不能超过2K");return;}this.filepost.PostedFile.SaveAs(serverPath);//上传保存文件this.lblMessage.Text = buider.T oString();}catch(Exception ex){Response.Write(ex.Message);}}}}。

一个ASP.NET虚拟主机安全漏洞的解决方案

一个ASP.NET虚拟主机安全漏洞的解决方案

一个虚拟主机安全漏洞的解决方案曾经很早就在网上看到一篇关于<虚拟主机的重大隐患>的文章,当时并不在意,做过asp虚拟主机的伴侣可能都知道,即对每一个用户都设置一个的服务器用户和单个名目的操作权限,能够基本上解决asp的fso问题。

在网上无意中发觉了一个叫做webadmin的-webshell,对自己的服务器进行测试的时候,让我大吃一惊,竟然对我服务器的c盘有读取的权限。

以及对整个硬盘的修改删除权限。

这样的话,那么我的服务器的平安……为了进一步证明,本人曾在国内一些有名的虚拟主机供应商上作过测试,均有和我一样的问题。

有必要先介绍一下漏洞的缘由。

ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 供应了强大的文件系统访问力量,可以对服务器硬盘上的任何有权限的名目和文件进行读写、删除、改名等操作。

FSO对象来自微软供应的脚本运行库scrrun.dll中。

在中我们发觉这一问题仍旧存在,并且变得更加难以解决。

这是由于.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严峻的是所具有的一项新功能,这就组件不需要象ASP 那样必需要使用regsvr32来注册了,只需将Dll类库文件上传到bin 名目下就可以直接使用了。

这一功能的确给开发带来了很大的便利,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加冗杂。

需要进一步了解的伴侣可以看<虚拟主机的重大隐患>一文,本文就不再重复。

只针对此问题引出虚拟主机的平安设置。

网上提出针对此问题用Microsoft .NET Framework Configration设置System.io的对名目读取的权限,经过我们长时间的测试没有胜利,可能是.net framework1.1机制改革了?废话不说。

先说说解决的思路:在 IIS 6 中,Web 应用程序的工作进程设置为以进程标识“Network Service”运行。

asp.net文件上传示例整理

asp.net文件上传示例整理

⽂件上传⽰例整理依托.net framework类库,封装了⼤量的功能,使得上传⽂件⾮常简单,主要有以下三种基本⽅法。

⽅法⼀:⽤Web控件FileUpload,上传到⽹站根⽬录。

代码如下复制代码Test.aspx关键代码:<form id="form1" runat="server"><asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" Text="上传" OnClick="Button1_Click" /><asp:Label ID="Label1" runat="server" Text="" Style="color: Red"></asp:Label></form>Test.aspx.cs关键代码:protected void Button1_Click(object sender, EventArgs e){if (FileUpload1.HasFile){FileUpload1.SaveAs(Server.MapPath("~/") + FileUpload1.FileName);Label1.Text = "上传成功!";}}⽅法⼆:⽤Html控件HtmlInputFile,上传到⽹站根⽬录。

代码如下复制代码Test.aspx关键代码:<form id="form1" runat="server"><input type="file" id="file1" runat="server" /><asp:Button ID="Button1" runat="server" Text="上传" OnClick="Button1_Click" /><asp:Label ID="Label1" runat="server" Text="" Style="color: Red"></asp:Label></form>Test.aspx.cs关键代码:protected void Button1_Click(object sender, EventArgs e){if (file1.PostedFile.ContentLength > 0){file1.PostedFile.SaveAs(Server.MapPath("~/") +Path.GetFileName(file1.PostedFile.FileName));Label1.Text = "上传成功!";}}⽅法三:⽤Html元素<input type="file" …/>,通过Request.Files上传到⽹站根⽬录。

ASP.NETCore文件上传与下载实例(多种上传方式)

ASP.NETCore文件上传与下载实例(多种上传方式)

Core⽂件上传与下载实例(多种上传⽅式)前⾔前段时间项⽬上线,实在太忙,最近终于开始可以研究研究 Core了.打算写个系列,但是还没想好⽬录,今天先来⼀篇,后⾯在整理吧. Core 2.0 发展到现在,已经很成熟了.下个项⽬争取使⽤吧.正⽂1.使⽤模型绑定上传⽂件(官⽅例⼦)这⾥吐槽⼀下 - -,这TM的机器翻译..还不如⾃⼰看E⽂的..⾸先我们需要创建⼀个form表单如下:<form method="post" enctype="multipart/form-data" asp-controller="UpLoadFile" asp-action="FileSave"><div><div><p>Form表单多个上传⽂件:</p><input type="file" name="files" multiple /><input type="submit" value="上传" /></div></div></form>其中,asp-controller和asp-action,(这个是TagHelper的玩法,以后讲)是我们要访问的控制器和⽅法.给我们的input标签加上 multiple 属性,来⽀持多⽂件上传.创建⼀个控制器,我们编写上传⽅法如下:public async Task<IActionResult> FileSave(List<IFormFile> files){var files = Request.Form.Files;long size = files.Sum(f => f.Length);string webRootPath = _hostingEnvironment.WebRootPath;string contentRootPath = _hostingEnvironment.ContentRootPath;foreach (var formFile in files){if (formFile.Length > 0){string fileExt = GetFileExt(formFile.FileName); //⽂件扩展名,不含“.”long fileSize = formFile.Length; //获得⽂件⼤⼩,以字节为单位string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机⽣成新的⽂件名var filePath = webRootPath +"/upload/" + newFileName;using (var stream = new FileStream(filePath, FileMode.Create)){await formFile.CopyToAsync(stream);}}}return Ok(new { count = files.Count, size });}这⾥我们采⽤ Core的新接⼝IFormFile, IFormFile的具体定义如下:public interface IFormFile{string ContentType { get; }string ContentDisposition { get; }IHeaderDictionary Headers { get; }long Length { get; }string Name { get; }string FileName { get; }Stream OpenReadStream();void CopyTo(Stream target);Task CopyToAsync(Stream target, CancellationToken cancellationToken = null);}上⾯的代码使⽤了IHostingEnvironment来获取项⽬的根⽬录地址.构造函数注⼊的代码如下:private readonly IHostingEnvironment _hostingEnvironment;public UpLoadFileController(IHostingEnvironment hostingEnvironment){_hostingEnvironment = hostingEnvironment;}这样,我们就完成了控制器的编写,然后到运⾏前端,上传⽂件..效果如下:通过IFormFile的CopyToAsync⽅法,我们就可以把这个⽂件流复制下来并保存到本地即可.2.使⽤Ajax上传⽂件上⾯我们是使⽤表单上传,但是项⽬过程中,⼤部分情况会使⽤Ajax进⾏上传,所以我们就来讲讲如何使⽤Ajax上传.⾸先编写HTML代码如下:<div><form id="uploadForm">AJAX上传多⽂件: <input type="file" name="file" multiple /><input type="button" value="上传" onclick="doUpload()" /></form></div>编写JS代码如下(这⾥我们使⽤FormData对象来上传):function doUpload() {var formData = new FormData($("#uploadForm")[0]);$.ajax({url: '@Url.Action("FileSave")',type: 'POST',data: formData,async: false,cache: false,contentType: false,processData: false,success: function (returndata) {alert(returndata);},error: function (returndata) {alert(returndata);}});}后台代码不做任何修改.我们会发现.直接在List<IFormFile> files中是⽆法获取到⽂件的.通过调试,我们可以发现,⽂件是上传成功的,但是放在了Request.Form.Files当中.所以修改后台代码如下:public async Task<IActionResult> FileSave(){var date = Request;var files = Request.Form.Files;long size = files.Sum(f => f.Length);string webRootPath = _hostingEnvironment.WebRootPath;string contentRootPath = _hostingEnvironment.ContentRootPath;foreach (var formFile in files){if (formFile.Length > 0){string fileExt = GetFileExt(formFile.FileName); //⽂件扩展名,不含“.”long fileSize = formFile.Length; //获得⽂件⼤⼩,以字节为单位string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机⽣成新的⽂件名var filePath = webRootPath +"/upload/" + newFileName;using (var stream = new FileStream(filePath, FileMode.Create)){await formFile.CopyToAsync(stream);}}}return Ok(new { count = files.Count, size });}改为直接从Request.Form.Files中获取⽂件集合.~3.使⽤webUploader上传⽂件很久之前..呃..封装过⼀个webUploader的JS..我们也⽤封装好的JS来试试.HTML和JS代码如下,后台代码不需要修改,还是直接从Request.Form.Files获取即可: <div id="upfliediv"></div>$(function () {//实例化⽂件上传$("#upfliediv").powerWebUpload({auto: true, fileNumLimit: 1});$("#upfliediv").CleanUpload();})上传效果如图:4.⽂件下载.上传了⽂件,我们当然需要下载.直接通过URL+地址下载是⼀种极其不安全的⽅式.这⾥我们采⽤返回流的形式来下载.后台代码如下:/// <summary>/// ⽂件流的⽅式输出 /// </summary>/// <returns></returns>public IActionResult DownLoad(string file){var addrUrl = file;var stream = System.IO.File.OpenRead(addrUrl);string fileExt = GetFileExt(file);//获取⽂件的ContentTypevar provider = new FileExtensionContentTypeProvider();var memi = provider.Mappings[fileExt];return File(stream, memi, Path.GetFileName(addrUrl));}这⾥值得注意的是,以前我们想获取ContentType直接使⽤MimeMapping.GetMimeMapping(file);就好了.但是这个类是在System.Web下的,core已经抛弃了现有的System.Web.所以在 Core中我们需要通过新的类FileExtensionContentTypeProvider来获取⽂件的ContentType编写HTML+JS代码如下(PS:因为是demo,所以写的⽐较简陋):<div><input type="text" id="filename" /><button onclick="downLoad()">下载</button></div>function downLoad() {var filename = $("#filename").val();window.location.href = "@Url.Action("DownLoad")?file=" + filename;}效果如图:以上这篇 Core⽂件上传与下载实例(多种上传⽅式)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

一种基于ASP实现无组件上传文件的新方法

一种基于ASP实现无组件上传文件的新方法

一种基于ASP实现无组件上传文件的新方法
周庆;王续跃
【期刊名称】《计算机技术与发展》
【年(卷),期】2004(014)012
【摘要】随着PC功能的日益强大,在客户端产生了许多有用的资源,大量的文件迫切需要直接向服务器传送.文中介绍了从浏览器向服务器上传文件的几种方式,在讨论了其优缺点之后,推荐使用RFC 1867上传机制和无组件上传方法.研究了常用的无组件上传文件方法及其实现原理,通过综合比较,为了实现任意类型的文件的上传,给出了一种利用ASP实现无组件上传文件的新方法.试运行结果表明,此方法可以有效地实现任意类型文件的上传.
【总页数】4页(P83-85,144)
【作者】周庆;王续跃
【作者单位】大连理工大学,机械工程学院,辽宁,大连,116024;大连理工大学,机械工程学院,辽宁,大连,116024
【正文语种】中文
【中图分类】TP393.09
【相关文献】
1.ASP中用无组件技术实现文件上传 [J], 朱勇
无组件上传图片到SQL Server数据库的实现 [J], 蒋铁海
3.基于ASP的无组件多文件上传的研究与实现 [J], 张文梅
4.利用ASP技术实现无组件图片的上传 [J], 秦久明
5.利用ASP技术实现无组件图片的上传 [J], 秦久明
因版权原因,仅展示原文概要,查看原文内容请购买。

虚拟机中搭建asp php aspx(一)

虚拟机中搭建asp php aspx(一)

虚拟机中搭建asp+php+aspx之安装dns服务器
学习中成长:yueyan
本机系统:win7盗版旗舰版
虚拟机系统:windows2003 专业版服务器
在学习中本地搭建环境测试是非常重要的,如在学习提权,挖0day…
况且在中国有句古话,知己知彼百战百胜,连别人网站是如何搭建的都不知道还学习什么渗透。

嘿嘿,小菜这里话多了。

首先:打开虚拟机菜单上的VM —setting‐如图:选择win2003.iso文件。

(安装windows组件时需要)
然后在开始菜单中打开管理服务器菜单。

选择添加或删除角色。

之后按图操作就ok了。

之后会提示ip地址无效,这里是未进行对本地连接的一些设定。

下面是对本地连接的设定。

按照图操作就ok了。

配置dns服务器。

在管理服务器菜单中按照以下操作就ok了。

接下来就是iis6.0的安装和asp,aspx,php环境搭建。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

虚拟主机问题之虚拟主机Asp无组件文件上传到租用服务器空间的实例1.库文件(upload.inc.asp)<%Dim oUpFileStreamClass UpFile_ClassDim Form,File,Version,ErrPrivate Sub Class_InitializeVersion = "无组件上传类V ersion V1.0"Err = -1End SubPrivate Sub Class_Terminate'清除变量及对像If Err < 0 ThenForm.RemoveAllSet Form = NothingFile.RemoveAllSet File = NothingoUpFileStream.CloseSet oUpFileStream = NothingEnd IfEnd SubPublic Sub GetData (RetSize)'定义变量Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo Dim iFileSize,sFilePath,sFileType,sFormValue,sFileNameDim iFindStart,iFindEndDim iFormStart,iFormEnd,sFormName'代码开始If Request.TotalBytes < 1 ThenErr = 1Exit SubEnd IfIf RetSize > 0 ThenIf Request.TotalBytes > RetSize ThenErr = 2Exit SubEnd IfEnd IfSet Form = Server.CreateObject ("Scripting.Dictionary")pareMode = 1Set File = Server.CreateObject ("Scripting.Dictionary")pareMode = 1Set tStream = Server.CreateObject ("ADODB.Stream")Set oUpFileStream = Server.CreateObject ("ADODB.Stream") oUpFileStream.Type = 1oUpFileStream.Mode = 3oUpFileStream.OpenoUpFileStream.Write Request.BinaryRead (Request.TotalBytes) oUpFileStream.Position = 0RequestBinDate = oUpFileStream.ReadiFormEnd = oUpFileStream.SizebCrLf = ChrB (13) & ChrB (10)'取得每个项目之间的分隔符sSpace = MidB (RequestBinDate,1, InStrB (1,RequestBinDate,bCrLf)-1) iStart = LenB (sSpace)iFormStart = iStart+2'分解项目DoiInfoEnd = InStrB (iFormStart,RequestBinDate,bCrLf & bCrLf)+3 tStream.Type = 1tStream.Mode = 3tStream.OpenoUpFileStream.Position = iFormStartoUpFileStream.CopyTo tStream,iInfoEnd-iFormStarttStream.Position = 0tStream.Type = 2tStream.CharSet = "gb2312"sInfo = tStream.ReadText'取得表单项目名称iFormStart = InStrB (iInfoEnd,RequestBinDate,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,"""",1)sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)oFileInfo.FileName = Mid (sFileName,InStrRev (sFileName, "\")+1) oFileInfo.FilePath = Left (sFileName,InStrRev (sFileName, "\")+1) oFileInfo.FileExt = Mid (sFileName,InStrRev (sFileName, ".")+1) iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14iFindEnd = InStr (iFindStart,sInfo,vbCr)oFileInfo.FileType = 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 = iInfoEndoUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2tStream.Position = 0tStream.Type = 2tStream.CharSet = "gb2312"sFormValue = tStream.ReadTextIf Form.Exists (sFormName) ThenForm (sFormName) = Form (sFormName) & ", " & sFormValueelseform.Add sFormName,sFormValueEnd IfEnd IftStream.CloseiFormStart = iFormStart+iStart+2'如果到文件尾了就退出Loop Until (iFormStart+2) = iFormEndRequestBinDate = ""Set tStream = NothingEnd SubEnd Class'文件属性类Class FileInfo_ClassDim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt '保存文件方法Public Function SaveToFile (Path)On Error Resume NextDim oFileStreamSet oFileStream = CreateObject ("ADODB.Stream") oFileStream.Type = 1oFileStream.Mode = 3oFileStream.OpenoUpFileStream.Position = FileStartoUpFileStream.CopyTo oFileStream,FileSizeoFileStream.SaveToFile Path,2oFileStream.CloseSet oFileStream = Nothingif Err.Number<>0 thenSaveToFile=err.number&"**"&Err.descriptonelseSaveToFile="ok"end ifEnd Function'取得文件数据Public Function FileDateoUpFileStream.Position = FileStartFileDate = oUpFileStream.Read (FileSize)End FunctionEnd Class%>2.处理用户提交后的页面(upload.asp)<!--#include file="upload.inc.asp"--><html><head><title>文件上传</title></head><body topmargin="0" leftmargin="0"><table width=100% border=0 cellspacing="0" cellpadding="0"><tr><td class=tablebody1 width=100% height=100% ><%dim upload,file,formName,formPath,filename,fileExtdim ranNumcall UpFile()'===========无组件上传(upload_0)====================sub UpFile()set upload=new UpFile_Class '建立上传对象upload.GetData (500*1024) '取得上传数据,此处即为500 Kif upload.err > 0 thenselect case upload.errcase 1Response.Write "请先选择你要上传的文件[ <a href=# onclick=history.go(-1)>重新上传</a> ]"case 2Response.Write "图片大小超过了限制500 K[ <a href=# onclick=history.go(-1)>重新上传</a> ]"end selectexit subelseformPath=upload.form("filepath") '文件保存目录,此目录必须为程序可读写if formPath="" thenformPath="rwdata/"end if'在目录后加(/)if right(formPath,1)<>"/" thenformPath=formPath&"/"end iffor each formName in upload.file '列出所有上传了的文件set file=upload.file(formName) '生成一个文件对象if file.filesize<100 thenresponse.write "请先选择你要上传的图片[ <a href=# onclick=history.go(-1)>重新上传</a> ]"response.endend iffileExt=lcase(file.FileExt)if CheckFileExt(fileEXT)=false thenresponse.write "文件格式不正确[ <a href=# onclick=history.go(-1)>重新上传</a> ]" response.endend if'randomizeranNum=int(90000*rnd)+10000filename=formPath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(no w)&ranNum&"."&fileExtif file.FileSize>0 then '如果FileSize > 0 说明有文件数据result=file.SaveToFile(Server.mappath(filename)) '保存文件if result="ok" thenresponse.write formName&" upload OK, had saved to "&filename&"<br>"elseresponse.write formName&" upload Fail,"&result&"<br>"end ifend ifset file=nothingnextset upload=nothingend ifend sub'判断文件类型是否合格Private Function CheckFileExt (fileEXT)dim ForumuploadForumupload="gif,jpg,bmp,jpeg"Forumupload=split(Forumupload,",")for i=0 to ubound(Forumupload)if lcase(fileEXT)=lcase(trim(Forumupload(i))) thenCheckFileExt=trueexit FunctionelseCheckFileExt=falseend ifnextEnd Function%></td></tr></table></body></html>3.HTML 表单(upload.html)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>asp 无组件上传</title></head><body>请选择要上传的文件<form action="upfile.asp" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file"><!--<br><input type="file" name="file"><br><input type="file" name="file"><br>--><input type="submit" name="Submit" value="提交"></form></body></html>。

相关文档
最新文档