ASP文件上传原理分析及实现实例
艾恩ASP上传 完整说明文档(最新版本)
艾恩ASP无组件上传类(上传组件)说明文档2010-1-18 By Anlige一、简介自从接触ASP就开始接触上传,看过一些上传类,但是总感觉封装的还是不够简单,因此自己尝试写一个能够用最少最简单的代码实现各种上传方式的上传类。
在学校期间就开始写,一点点的完善、优化,到现在的版本,现在的版本能适应各种上传方式。
上传类的主要的功能如下:1、自由设置最大上传大小、单文件最大上传大小2、自由设置允许上传的文件类型3、可设置文本的编码,以适应各种上传环境4、内置进度条,a用户可选择开启和关闭5、多种错误状态处理6、多种文件保存方式:原文件名、随机文件名、用户自定义文件名7、自由选择是否覆盖已存在文件8、完整保存表单数据,支持同名表单,不支持同名文件域注意:1、特别注意Form一定要加上enctype="multipart/form-data"属性,method属性值必须是post,否则上传会出错2、request.form()方法获取数据失效,请使用UpLoad.forms()3、上传前请确认保存文件的文件夹有读写权限,若不可写则会出现"文件无法写入"错误,解决方法/show.asp?id=81二、调用方法1、无组件类的调用方法:Dim Uploadset Upload = new AnUpLoad2、组件的调用方法:Dim UploadSet Upload = server.CreateObject("Jo.Upload")注意:上传属性的设置必须在调用Upload.GetData()之前。
简单调用示例:Dim Uploadset Upload=new AnUpLoad'Set Upload = server.CreateObject("Anasp.Anupload") Upload.SingleSize=1024*1024*1024'设置单个文件最大上传限制,按字节计;默认为不限制Upload.MaxSize=1024*1024*1024'设置最大上传限制,按字节计;默认为不限制Upload.Exe="bmp|rar|pdf|jpg|gif"'设置合法扩展名,以|分割Upload.Charset="gb2312"'设置文本编码,默认为gb2312Upload.openProcesser=false'禁止进度条功能,如果启用,需配合客户端程序Upload.GetData()'获取并保存数据,必须调用本方法三、类说明上传涉及2个类-AnUpLoad(关键上传类)和UploadFile(文件类,保存文件相关信息),下面分别说明:1、AnUpLoad(关键上传类)2、UploadFile(文件类(对象),保存文件相关信息)由于本类(对象)为JScript对象,其属性都是可读写的,一些由程序自动处理的属性不建议用户写入。
ASP应用系统中实现文件上传的方案研究
,
件 上 传 的 方 案
研
究
u ag , er s i su ic ent pro d th ex mpl a ly ng. s e m it , n ff i , vi e e a e pp i
K y r S A P; D c m n ; U l a : R s a c e wo d : S ouet pod e er h
FP T 技术可用在网站建设和管理中,网站开发者和管理
者上传下载网站文件 。F P T 方式一般不会面 向网站用户,因
者来说,技术要求比较高, 好在互联网上有很多提供AP S 资
源的网站, 开发者 可以从 中获得 由第三方设计 的文件上传组
为如果采用 FP T方式 , 网站用户则需要掌握FP 户程序, T客 操 作比较繁琐,即使直接使用浏览器进行 FP T,操作起来也不 方便 ; e 服务器面 向网站用 户开通 FP Wb T ,可能会给服务器
网站 开发者在设计文件上 传功能时,一般 是采用基于 Wb e 方式,这种方式 是把 文件上传功能与 W b e 页集成,网站 用户在浏览 W b e 页面 就能完成 上传 任务 ,操作非常方便。基 于W b e 方式主要有组件上传方式和基于数据库的无组件上传 方式 。 2 组件上传 方式
文件上传的原理研究与应用
文件上传的原理研究与应用1. 文件上传概述文件上传是指通过网络将本地文件传输到服务器端的过程。
在互联网时代,文件上传功能被广泛应用于网站、应用程序等场景,如论坛上传附件、社交网站上传图片等。
2. 文件上传的原理文件上传的原理是使用HTTP协议进行数据传输。
HTTP协议是基于请求-响应的客户端-服务器协议,文件上传是通过向服务器发送POST请求来实现的。
3. 文件上传的步骤文件上传一般包含以下几个步骤:3.1. 构建上传表单首先,需要在前端页面构建一个上传表单。
表单中需要包含一个文件选择框,用于用户选择待上传的文件。
3.2. 文件选择与预览用户通过点击文件选择框选择待上传的文件。
在某些场景下,可以提供文件预览功能,使用户可以在上传前预览文件内容。
3.3. 文件分片处理为了能够上传大文件,并提高上传速度,可以将大文件切分为多个小文件进行分片上传。
在服务端,需要进行合并处理。
3.4. 构建HTTP请求根据上传方式的不同(同步或异步),构建对应的HTTP请求。
对于同步上传,使用表单的默认提交方式;对于异步上传,一般使用Ajax方式发送POST请求。
3.5. 服务器端接收请求服务器端接收到上传请求后,需要解析请求,获取上传文件的相关信息(如文件类型、大小等),并进行相应的校验。
3.6. 文件保存与存储服务器端根据上传文件的信息,决定文件的保存方式,可以将文件保存在服务器本地的指定路径上,也可以将文件保存在数据库或其他存储介质中。
3.7. 响应客户端上传结束后,服务器端需要向客户端发送响应,告知上传结果。
如果上传成功,可以返回文件的访问URL或其他相关信息。
4. 文件上传的常见应用场景文件上传功能在 Web 开发中被广泛应用于各种场景,主要包括:4.1. 网站附件上传很多网站提供了附件上传功能,例如论坛、博客等,用户可以通过上传附件来分享图片、音频、视频等文件,丰富了互动和交流。
4.2. 网络存储一些云存储服务商提供了文件上传功能,用户可以将本地文件上传到云端,实现文件的备份和共享。
基于ASP.NET文件上传设计与实现
( ) 得 上传 的文 件 名 称 及 对磁 盘 的操 作 三 获 为 了 获 得 上 传 的 文 件 名 称 . 必 须 要 引 入 一 个 名 称 空 间 ( a spe 一 S S E 1 。 名称 空 间里 面 定 义 了关 于文件 N meac ) Y M. r 0 此 计 算 模式 :/( R WS RS R E ) 1 器, 务 器模 式 BSB O E /E V R t 览 服 ¥ 3 软 件的 基 本 功能 . 及磁 盘 操 作 的类 .在 本 软 件 功 能实 现 中就 是 利 用 这 些 类 的 方 法 本 软 件 主要 完 成 上传 本 地 的文 件 到 服 务 器 的 指 定 目录 的 功 和属 性 来 完成 的 能 。 在软 件 的 运行 界 面 中 。 用户 选 择 完 要 上 传 的文 件 名 称 。 填入 ( ) 得 上 传 文 件 的名 称 1获 要 上传 到 服 务 器 的 目录名 称 后 .如 果 没 有 填 入 上 传 到 服务 器 目 使 用 P T 类 中 的 G tf N e 法 。 体 如 下 : AH eF e a 方 l m 具 录 。则使 用 缺 省 目录”C、. :.。如果 填入 的 目录 在 服务 器上 不 存 u la F l Na e= u l a f eP s d i .i Na po d i m e p o d l .o t Fl F l me i e e e 在 。 建 立此 目录 。 按 ”开始 上传 ” 钮 后 。 就 在 按 软件 就 把 选择 的文 说 明 : u lafe otd i .i N e返 回 的是 通 过 文 件对 p d lP s Fl Fl a o i . e e em 件上 传 到 指 定 的 目录 中 , 后 返 回上 传 文 件 的 信 息 。 文件 的名 话 框 选 择 的文 件 名 。 中包 含 了 文 件 的 目录 信 息 。 们 要 去 掉 目 然 即 其 我 称 。 件 的大 小 及 文件 的类 型 。 件 具体 的操 作 界 面 及 运行 结 果 录信 息 。 回 文件 名 称 。 以利 用 下 面 语 句来 实现 : 文 软 返 可 界 面如 图 1 图 2所 示 。 和 u l d i N e=P t.eF e a e u l d i N e) po Fl a a em ah tiN G l m (po Fl a a em ( ) 断 上 传 目录是 否 存 在 。 存 在 就 建 立 2 判 不 建 立 目录 要 使 用 到 D r ty类 中 的 CetDrcoy方 法 . i co e r ra i t e e r 判 断 目录是 否 存 在 要 用 到 Drcoy类 中 的 E is 法 。具 体实 i tr e xt方 s
asp无组件上传文件
asp无组件上传文件所谓“无组件上传文件”,就是不使用第三方组件,直接上传文件。
它是非常复杂的,可是为什么本节还要花一定的篇幅讲解呢?原因有二:(1)如果使用别人的服务器,对方可能不允许你安装第三方组件,就必须使用无组件上传;(2)学习无组件上传,就可以对文件上传的原理有深刻了解,有助于大家理解AspUpload等组件到底是怎么工作的,甚至可以动手开发属于自己的文件上传组件。
要掌握无组件上传,其实最为重要的是学会分析客户端传上来的数据,为此将首先在此讲述无组件上传原理,随后会举一些综合示例。
1. 无组件上传原理细心的同学可能已经注意到,不管是用AspUpload组件还是LyfUpload组件,上传表单文件都是一样的。
这也就提醒我们,用户将文件提交到服务器端的时候都是一样的,区别就是服务器端得到数据后,用什么方法来分析得到其中的文件名称、文件大小、文件内容、文件说明等信息。
所谓无组件上传,就是要我们自己来手工获取这些信息。
下面就分步讲解:(1)剖析上传数据的格式要对上传的数据进行分析,就必须知道上传数据的格式。
其实在<form>标记中增加enctype="multipart/form-data"属性后,上传的数据是一个长长的二进制字符串,其中包括了文件浏览框的名称、文件的客户端路径、文件MIME类型、文件内容、文本框(文件说明)的名称、文本框的值等各种信息。
就好比是邮局送到学校来的一个大邮包,其中包含了信件、包裹、汇款单、报刊等各种东西,学校收发室就要将这些东西挑出来送给相应的人。
二进制字符串是无法直接显示在页面上的,如果非要直接显示,将会看到一堆乱码,但是我们可以将二进制字符串先转换为文本字符串,然后再显示到页面上。
以本示例为例,假如客户选择了文件“C:\temp.jpg”,并且填写了文件说明“我的照片”,提交后,将二进制字符串转换为文本字符串,结果如图所示:上传数据格式说明:①首先要强调,提交上来的数据是一个二进制数据,将来我们需要处理的也是二进制数据。
基于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中实现文件上传方法的研究
箧
文 0 皮卫 ( 南 商 务职 业技 术 学 院 ) 湖 Nhomakorabea:
A S P中实现文件上传 方法 的研究
圆
直接 实现 文 件 上 传 功能 。其 基 本 原 理 是 采 用 ADO TREAM 对象的 B NARYRE S I AD 方法将 F0RM 中的 所有数 据读 出 ,从 中截 取 出所 需 的 文 件 数据 , 以二 进 制 文 件 方 式 做 了比 较 。 关键词 : S 组件 ;F E 象;S R A 存 盘 。它 的 实 现 步 骤 如 下 : AP I 对 L T EM 1. 打开 STR M 对 象 EA 对 象 对于 SREAM 对 象而 言 ,若 要进行 文 当 用 户 需 要 将 文 件 传 输 到 服 务 器 上 时 ,常见 的文件 上传技 术有 :基于 H TTP 件 的 保存 ,则 必 须 是将 该对 象 的 全 部 内 容 协议的、基于 VB ( D L HI 或 E P 等编程语言 ) 进行保 存 。因此 ,我们 必须要 创建 两个 ( 或 开 发 的文 件 上 传组 件 的 、基 于 数据 库 技 术 多个 )s TREAM 对 象 ,其 中一 个为源数 据 和利 用 A S 技术 直接 实现 文件 上传 等等 。 流 , 即接 收 初 始 的 二进 制 数 据 ; 另一 个 为 P 除 了利用 A SP 技 术直 接实 现文 件上 传外 , 目的数 据 流 ,即 接 收 来 自经源 数 据 流 处 理 上 述 方 法 一 般 都 需 要 编 程 者 能 同 时 掌 握 后 的 数 据 ,并 最 终 保 存 为 所 需 的 文 件 。 w EB技术 、数据库 技术或 CGI 术或组件 技 2. M 对 象 间 内容 的复 制 sT EA 技 术 ,对 编 程 者 的要 求 较 高 。 但是 ,利 用 < % ts r C etO . 蛭 r ae b 爱 o 邑 r ' 。 为源数据流 ・ D t 。 y ) A SP 技术直 接实 现文 件上 传功能 则 只需编 se l L: d= 设 置打开模式,3 tMqe 3 r 为可读可写 ‘ 程者掌握 单 一的 A 技 术 即可 。 SP s , = tT r  ̄e l设置数据类型,1 为二进制数据 几 种 文 件 上 传 技 术 的 比较  ̄ , g Op g ( )基于 HTTP协议 一 s 1 c e 嘣“ D 曼s 肄 ‘ 照 e c t g 辑 0 Q ) 嚣c为目标数据梳 c M + 该 方 法需 要 编 程 者 利 用 第 三 方 软 件 , c l・ 如 DE P 、VB等 ,在应用程序 中先进行 L HI d} p ; e∞ ∞ H T T P协 议编程 ,然 后将待 上传 文件 内容 % > 按 HTTP协 议的格式打包 ,最后 向 wEB服 务 器发 送 上 传 的请 求 报 文 , 从而 实 现 文 件 在 该 部分 ,必 须 在 源 数 据 流 中定 位 文 的上传。因为 DEL PHI VB不能编写完整 件 开 始 的 位 置 ,并 且 求 出 文 件 内 容 的 长 和 的 w EB 网络程序 ,只能编 写 w E 小应用 度 ,才 能 将 文 件正 确的 复 制 到 目的 数据 流 B 程 序 ,因 此 , 该方 法 只 用 于功 能受 限 的 网 中 , 并且 保 存 文 件 ,程 序 代 码 如 下 : 络应用。 3. 闭 ST EA 对 象 关 M ( 二)基于 VB ( DE L 或 PH I )开 等 t y ) 0 睡 为 上传韵所育内容 婶 ’ 她 f 发 的 文 件 上 传 组 件 蜒W t瓤珥蠹 赋 值 i r e b。 源鼓据 精 该方法利用 VB ( DE P 等编程语 s lst =on-n(eu)2。si 或 L HI i o ig c utl brsl 一 p io r otn e t o t n指出文件韵开始位置 断Ld [ [ ct )l 操 c ni e 表 言 )开发 ASP 服务 器组件 ,实现 特定 的文 蛳 。 0 , ̄bfeomt。 ( e 吲 ) 示文件 韵长度 e a TF eup h 。 al 5 v qi la , 以 e lf lt 2 ! 指定韵 ! 路径 =名称 暨 保存文 件 件上传 服务 。它首先 利用 A SP表 单功 能将 % > + 文件 ( 进 制格 式 )从 用 户端 上 传 到 服 务 二 器端 ,然 后使 用 V B 开发 的 组件 ,对 二 进 编程 完成后 ,应关 闭并 释放 STE A M 制文 件 进行 处 理 ,成 为 可 以 正常 读 写 的 文 对 象 ,如 下 所 示 : 二 实 现 文 件 上 传 的 实例 讲 解 件 。该方 法 要求 编 程 者不 仅掌 握 A S P 语 言 ,而 且 还能 利 用 V B 等 第三 方 语言 进 行 <% 组 件 编 程 ,增 加 了开 发 的 难 度 。 De  ̄ Co e s ls ( ) 基 于 数 据 库 技 术 三 S t ec atig e d, - o n z ̄ h 该 方法 和 上 个 方法 有 类 似 之 处 。 不 同 瓤 C 0@ 15 Se TR- ohng t S  ̄ ti 的地 方 在 于 对 上 传 的 二 进 制 文 件 的 处 理 % > 上 。它 使 用数 据 库 来 保 存二 进 制 文 件 。 无 ( ) 文 件 上 传 表 单 一 论 是 小 型数 据 库 还 是 大 型数 据 库 都 提 供 了 首 先 需 要 编 写 一 个能 提 供 文 件 上 传 功 存储 二进 制数 据 的数据 类型 ,只 要以 A P— p nd Chu e nk方式 将数据 存入相应的 字段 能 的 表 单 ,程 序 如 下 所 示 : < F 0rm act 0r= ” i l uPl 0ad . P ’ as ’ 就 可 以 了 。该 方 法 虽然 简单 可 行 ,但 是 因 t d s e t =” t r / o m p 为 每 次上 传的 文 件 大小 都 是 不 一 样 的 , 因 me ho =p0 t nc ype muli a t f r at 此 ,会 对 数 据 库 的空 间 造 成 很 大 的 浪 费 , d a”> 上 传文 件 : < I2 1PUt t yPe=f 1 i e 降 低 了数 据 的 访 问 速度 ;并 且 使 得 文 件 只 m =f l 能 在 数据 库 环 境 下 进行 访 问 ,造 成 了 很 大 na e iel> < br> < i put yp n t e=s ubm i na e=upl a t m od 的不便 。 ( )利 用 A S P 技 术 直 接 实现 文 件 v l e 上 传 ”> 四 au =” 摘 要 :当前 许 多基 于 W EB 的应 用都 涉 及 文件 上传操 作 。 本文主 要论 述 了ASP 中 实现 文件 上 传 的各 种 方 法 ,并 对 其优 缺点
asp实现上传功能的源码演示(简单易懂)
asp无组件上传图片的源码分析及下载要实现图片的上传功能其实非常简单,只需要四个文件与一个文件夹即可实现。
第一个文件:Upload.asp这个文件的源代码如下:<form method="POST" name="myform" target="_self"><input type="text" id="DefaultPicUrl"><iframestyle="top:2px"ID="UploadFiles"src="upload_Photo.asp?PhotoUrlID=1"f rameborder=0 scrolling=no width="300" height="325"></iframe></form>说明:这个文件将引用一个名为upload_Photo.asp的文件也就是下面要讲的第二个文件作为框架,同时这里传递一个PhotoUrlID参数给pload_Photo.asp 这个文件的form1表单中的名为PhotoUrlID的隐藏域名,其值为1第二个文件:Upload_Photo.asp,这个文件的源代码如下:<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css"><!--BODY{BACKGROUND-COLOR: #E1F4EE;font-size:9pt}.tx1 { height: 20px;font-size: 9pt; border: 1px solid; border-color: #000000; color: #0000FF}--></style><SCRIPT language=javascript>function check(){var strFileName=document.form1.FileName.value;if (strFileName=="")alert("请选择要上传的文件");document.form1.FileName.focus();return false;{}}</SCRIPT></head><body leftmargin="0" topmargin="0"><formaction="Upfile_Photo.asp"method="post"name="form1"onSubmit="retur ncheck()"enctype="multipart/form-data"><input name="FileName" type="FILE" class="tx1" size="30"><inputtype="submit"name="Submit"value="上传"style="border:1pxdoublergb(88,88,88);font:9pt"><inputname="PhotoUrlID"type="hidden"value="<%=Clng(trim(request("PhotoUrlID")))%>"></form></body></html>说明:这个是作为第一个文件Upload.asp的框架文件,注意这里的FileName的文本框是用于接受上传成功之后图片的地址第三个文件:Upfile_Photo.asp,其源代码如下:<!--#include file="upfile_class.asp"--><%constupload_type=0'上传方法:0=无惧无组件上传类,1=FSO上传2=lyfupload,3=aspupload,4=chinaaspuploaddim upload,oFile,formName,SavePath,filename,fileExt,oFileSizedim EnableUploaddim arrUpFileTypedim ranNumdim msg,FoundErrdim PhotoUrlIDmsg=""FoundErr=falseEnableUpload=false%><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style type="text/css"><!--BODY{BACKGROUND-COLOR: #E1F4EE;}font-size:9ptid="PhotoUrlID".tx1 {height: 20px;font-size: 9pt;border: 1px solid;border-color: #000000;color: #0000FF}--></style></head><body leftmargin="2" topmargin="5" marginwidth="0" marginheight="0" > <%if EnableUploadFile="No" thenresponse.write "系统未开放文件上传功能"elseselect case upload_typecase 0call upload_0()'使用化境无组件上传类case else'response.write "本系统未开放插件功能"'response.endend selectend if%></body></html><%sub upload_0()'使用化境无组件上传类set upload=new upfile_class ''建立上传对象upload.GetData(104857600)'取得上传数据,限制最大上传100M if upload.err > 0 then'如果出错select case upload.errcase 1response.write "请先选择你要上传的文件!"case 2response.write "你上传的文件总大小超出了最大限制(200k)"end select response.endend ifPhotoUrlID=Clng(trim(upload.form("PhotoUrlID")))if PhotoUrlID>0 thenSavePath = "UploadFiles"'存放上传文件的目录elseSavePath = "UploadFiles"'存放上传文件的目录end ifif right(SavePath,1)<>"/" then SavePath=SavePath&"/" '在目录后加(/)for each formName in upload.file '列出所有上传了的文件set ofile=upload.file(formName)'生成一个文件对象oFileSize=ofile.filesizeif oFileSize<100 thenmsg="请先选择你要上传的文件!"FoundErr=Trueelseselect case PhotoUrlIDcase 0if oFileSize>(MaxFileSize*1024) thenmsg="文件大小超过了限制,最大只能上传"&CStr(MaxFileSize)&"K的文件!"FoundErr=trueend ifcase 1if oFileSize>(10000*1024) thenmsg="文件大小超过了限制,最大只能上传10M的文件!"FoundErr=trueend ifend selectend iffileExt=lcase(ofile.FileExt)arrUpFileType=split("gif|jpg|bmp|png|swf|doc|rar|xls","|")'如需添加其它类型的文档请for i=0 to ubound(arrUpFileType)if fileEXT=trim(arrUpFileType(i)) thenEnableUpload=trueexit forend if在这里添加文档后缀名nextif fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" thenEnableUpload=falseif EnableUpload=false thenmsg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:"&FoundErr=trueend ifstrJS="<SCRIPT language=javascript>" & vbcrlfif FoundErr<>true thenrandomizeranNum=int(900*rnd)+100"gif|jpg|bmp|png|swf|doc|rar|xls"filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(n ow)&second(now)&ranNum&"."&fileExtofile.SaveToFile Server.mappath(FileName)'保存文件response.write "文件上传成功!文件大小为:" & cstr(round(oFileSize/1024)) &"K"select case PhotoUrlIDcase 0strJS=strJS&"parent.document.myform.PhotoSize1.value='"cstr(round(oFileSize/ 1024)) & "';" & vbcrlfcase 1strJS=strJS&"parent.document.myform.DefaultPicUrl.value='"fileName & "';" & vbcrlfend selectstrJS=strJS & "alert('" & msg & "');" & vbcrlfstrJS=strJS & "history.go(-1);" & vbcrlfend ifstrJS=strJS & "</script>" & vbcrlfresponse.write strJSset file=nothingnextset upload=nothingend sub%>第四个文件upfile_class.asp,源代码如下<%Dim oUpFileStream'---------------------------------------------------------------------- '文件上传类Class UpFile_ClassDim Form,File,Version,ErrPrivate Sub Class_InitializeVersion = "无惧上传类Version V1.2"Err = -1End SubPrivate Sub Class_Terminate'清除变量及对像If Err < 0 ThenForm.RemoveAllSet Form = Nothing&&File.RemoveAllSet File = NothingoUpFileStream.CloseSet oUpFileStream = NothingEnd IfEnd SubPublic Sub GetData (MaxSize)'定义变量DimRequestBinData,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfoDim iFileSize,sFilePath,sFileType,sFormValue,sFileNameDim iFindStart,iFindEndDim iFormStart,iFormEnd,sFormName'代码开始If Request.TotalBytes < 1 Then'如果没有数据上传Err = 1Exit SubEnd IfIf MaxSize > 0 Then '如果限制大小If Request.TotalBytes > MaxSize ThenErr = 2'如果上传的数据超出限制Exit 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 = 0RequestBinData = oUpFileStream.ReadiFormEnd = 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)+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,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,"""",1)sFileName = Mid(sinfo,iFindStart,iFindEnd-iFindStart) oFileInfo.FileName = Mid (sFileName,InStrRev (sFileName, "\")+1) oFileInfo.FilePath = Left (sFileName,InStrRev (sFileName, "\")) oFileInfo.FileExt = Mid (sFileName,InStrRev (sFileName, ".")+1) iFindStart = InStr (iFindEnd,sInfo,"Content-Type: ",1)+14 iFindEnd = 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-2 tStream.Position = 0tStream.Type = 2tStream.CharSet = "gb2312"sFormValue = tStream.ReadTextIf Form.Exists (sFormName) ThenForm (sFormName) = Form (sFormName) & ", " & sFormValue elseform.Add sFormName,sFormValueEnd IfEnd IftStream.CloseiFormStart = iFormStart+iStart+2'如果到文件尾了就退出Loop Until(iFormStart+2) >= iFormEndRequestBinData = ""Set tStream = NothingEnd SubEnd Class'------------------------------------------------------------------------------'文件属性类Class FileInfo_ClassDim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt'保存文件方法Public Function SaveToFile (Path)if lcase((right(Path,3))<>lcase(FileExt)) then '经典的上传漏洞^_^response.Write("<scriptlanguage=javascript>alert('警告:不允许上传这种文件!');</script>")response.endend ifOn Error Resume NextDim oFileStreamSet oFileStream = CreateObject ("ADODB.Stream")oFileStream.Type = 1oFileStream.Mode = 3oFileStream.OpenoUpFileStream.Position = FileStartoUpFileStream.CopyTo oFileStream,FileSizeoFileStream.SaveToFile Path,2oFileStream.CloseSet oFileStream = NothingEnd Function'取得文件数据Public Function FileDataoUpFileStream.Position = FileStartFileData = oUpFileStream.Read (FileSize)End FunctionEnd Class%>除了上面四个文件夹之外还需要一个名为UploadFiles的文件夹,注意以上的四个文件与文件夹都是放在网站根目录下,也就是同极目录下的,如果目录不同级,请修改路径,同时本程序不仅可以包括jpg,png,gif等类型的图片,还可以上传word、EXECL、记事本、RAR压缩包等,当然上传对大小是有限的,只限定在200K以内,如果超过200K将会出错.。
asp.net对文件的上传和下载源码
对文件的上传和下载源码上传Aspx 代码<%@ Page Language="C#"AutoEventWireup="true" CodeFile="MultiFileUpload.aspx.cs"Inherits="MultiFileUpload" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>孟宪会多文件上传测试</title><script type="text/javascript">function addFile() {var div = document.createElement("div");var f = document.createElement("input");f.setAttribute("type", "file")f.setAttribute("name", "File")f.setAttribute("size", "50")div.appendChild(f)var d = document.createElement("input");d.setAttribute("type", "button")d.setAttribute("onclick", "deteFile(this)");d.setAttribute("value", "移除")div.appendChild(d)document.getElementById("_container").appendChild(div);}function deteFile(o) {while (o.tagName != "DIV") o = o.parentNode;o.parentNode.removeChild(o);}</script></head><body><form id="form1"runat="server"method="post" enctype="multipart/form-data"><h3>多文件上传</h3>用户名:<asp:TextBox ID="T extBox1" runat="server"></asp:TextBox><div id="_container"><input type="file" size="50" name="File"/></div><div><input type="button"value="添加文件(Add)" onclick="addFile()"/></div><div style="padding:10px 0"><asp:Button runat="server"Text="开始上传" ID="UploadButton"onclick="UploadButton_Click"></asp:Button></div><div><asp:Label ID="strStatus" runat="server" Font-Names="宋体" Font-Bold="True" Font-Size="9pt"Width="500px"BorderStyle="None"BorderColor="White"></asp:Label></div></form></body></html>C#代码using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class MultiFileUpload : System.Web.UI.Page{protected void UploadButton_Click(object sender, EventArgs e){///'遍历File表单元素HttpFileCollection files = HttpContext.Current.Request.Files;/// '状态信息System.Text.StringBuilder strMsg = new System.Text.StringBuilder("您输入的用户名是:" + TextBox1.Text + "<br/>");strMsg.Append("上传的文件分别是:<hr color='red'/>");try{for (int iFile = 0; iFile < files.Count; iFile++){///'检查文件扩展名字HttpPostedFile postedFile = files[iFile];string fileName, fileExtension;fileName = System.IO.Path.GetFileName(postedFile.FileName);if (fileName != ""){fileExtension = System.IO.Path.GetExtension(fileName);strMsg.Append("上传的文件类型:"+ postedFile.ContentType.ToString() + "<br>");strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>");strMsg.Append("上传文件的文件名:" + fileName + "<br>");strMsg.Append("上传文件的扩展名:"+ fileExtension + "<br><hr>");///'可根据扩展名字的不同保存到不同的文件夹///注意:可能要修改你的文件夹的匿名写入权限。
Asp.net实现MVC处理文件的上传下载功能实例教程
实现MVC处理⽂件的上传下载功能实例教程上传于下载功能是程序设计中⾮常常见的⼀个功能,在程序开发中有着⾮常⼴泛的应⽤。
本⽂就以实例形式来实现这⼀功能。
⼀、概述如果你仅仅只有 Web Forms背景转⽽学习 MVC的,我想你的第⼀个经历或许是那些曾经让你的编程变得愉悦⽆⽐的服务端控件都驾鹤西去了.FileUpload就是其中⼀个,⽽这个控件的缺席给我们带来⼀些⼩问题。
这篇⽂章主要说如何在 MVC中上传⽂件,然后如何再从服务器中把上传过的⽂件下载下来.⼆、实现⽅法1.⽂件上传在Web Forms中,当你把⼀个FileUpload控件拖到设计器中,你或许没有注意到在⽣成的HTML中会在form标签中加⼊⼀条额外属性enctype="multipart/form-data". ⽽FileUpload控件本⾝会⽣成为<input type=”file” />,在MVC的view⾥,有许多种⽅法可以做到同样效果,第⼀种的HTML如下:<form action="/" method="post" enctype="multipart/form-data"><input type="file" name="FileUpload1" /><br /><input type="submit" name="Submit" id="Submit" value="Upload" /></form>注意form标签已经包括了enctype标签,⽽method属性则设为”post”,这样设置并不多于因为默认的提交时通过HTTP get⽅式进⾏的。
下⾯这种⽅式,使⽤Html.BeginForm()扩展⽅法,会⽣成和上⾯同样的HTML:<%using (Html.BeginForm("", "home", FormMethod.Post, new {enctype="multipart/form-data"})){%><input type="file" name="FileUpload1" /><br /><input type="submit" name="Submit" id="Submit" value="Upload" /><% }%>注意<input type=”file”>标签的name属性,我们在后⾯再讨论OK,现在我们可以浏览本地⽂件然后通过Upload提交按钮将⽂件提交到服务器端,下⼀步就是在服务器端处理上传的⽂件,在使⽤fileUpload控件时,你可以很轻松的通过FileUpload的hasFile⽅法来查看⽂件是否被上传。
asp的工作原理
asp的工作原理
ASP的工作原理是基于服务器端脚本的动态网页技术。
下面
将详细介绍ASP的工作原理。
1. 客户端发起请求:用户在浏览器中输入网址或点击链接,向服务器发送HTTP请求。
2. 服务器接收请求:服务器接收到请求后,首先判断请求的文件是否为ASP文件,如果是ASP文件,则将该请求交给ASP
引擎处理。
3. ASP引擎解析文件:ASP引擎将ASP文件加载到内存中,
并解析文件中的脚本代码和标签,将其转化为可执行的服务器端代码。
4. 执行服务器端代码:ASP引擎执行解析后的服务器端代码,可以包括与数据库交互、文件操作、逻辑判断、循环等等。
5. 生成动态内容:执行服务器端代码后,根据代码逻辑生成动态内容。
可以是动态生成的HTML、XML或其他格式的数据。
6. 发送响应到客户端:服务器将生成的动态内容作为HTTP响应发送给客户端,客户端浏览器接收到响应后解析并渲染网页。
需要注意的是,ASP的工作原理是在服务器端进行的,所以
客户端只能看到最终生成的静态网页内容,而无法看到服务器
端脚本的源代码。
这种方式可以确保服务器端的安全性,同时也提高了网页响应速度和用户体验。
ASP无组件上传
无组件上传·从原理剖析到实践无组件上传一直是困扰大家的一个问题。
其实原理很简单,核心就是分析字符串。
但是,实际操作时,却困难重重。
其中的关键问题还是大家往往对原理的剖析不够深入,或者是因为过程过于繁琐,导致bug不断。
一直以来,都想做一个完善的例子,只不过想想就头痛,加上没时间(借口,呵呵),所以没有付诸行动。
今天就咬咬牙,给大家提供一个完整的无组件上传的例子。
因为本人耐性不好,所以咱们一点一点来,分几天完成。
未来的几天,我会天天更新这个文档,这个过程也是大家学习和提高的过程。
(完整的源码和示例,可以在这里找到:/asp/attach/A0000006.zip)==============================================================第一天:认识我们的解剖对象——数据上传文件时,首先要知道我们得到的是什么。
下面是一个上传文件的表单,我们就从他开始。
<form action="doupload.asp" method=post enctype="multipart/form-data">file1说明:<input type=text name=file1_desc> file1<input type=file name=file1><br>file2说明:<input type=text name=file2_desc> file2<input type=file name=file2><br><input type=submit name=upload value=upload></form>表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。
asp 原理
asp 原理
ASP(主动服务器页面)是一种使用VBScript或JScript等脚
本语言编写的服务器端脚本技术,用于动态生成HTML页面。
ASP的原理是在服务器上运行的一个程序,当客户端发起请
求时,服务器通过ASP引擎解析ASP文件中的脚本代码,并
执行相应的逻辑,最终将生成的HTML响应返回给客户端。
ASP的工作原理如下:
1. 客户端发送HTTP请求到服务器。
2. 服务器接收到请求后,会先判断请求的文件扩展名,如果是".asp"则启动ASP引擎。
3. ASP引擎解析ASP文件中的脚本代码,并执行其中的逻辑
操作。
脚本代码可以包含控制结构、变量定义、函数等等。
4. 在ASP文件中,可以使用特定的标记(如<%= 和 %>)来
嵌入动态内容,这些标记会被ASP引擎解析并执行。
5. 在执行过程中,ASP引擎可以与数据库、文件系统、邮件
服务器等其他系统交互,以获取或更新所需的数据。
6. 最终,ASP引擎生成的HTML响应会被发送回客户端,展
示给用户。
ASP的主要优点是简单易学,支持多种脚本语言,可以与其
他技术(如ADO、COM组件等)无缝集成,以及提供了强大的动态网页生成能力。
它被广泛用于开发企业级应用、Web
应用程序、电子商务网站等。
关于asp的工作原理
关于asp的工作原理
ASP(活动服务器页面)是一种用于构建动态网站和Web应用程序的服务器端脚本技术。
它的工作原理基于以下几个关键步骤:
1. 请求:当用户在Web浏览器中输入或单击链接访问一个ASP页面时,浏览器将发送一个HTTP请求到Web服务器。
2. 服务器:Web服务器接收到这个HTTP请求后,检查请求的文件扩展名是否为.asp或.aspx。
如果是,服务器将把该请求发送给ASP引擎处理。
3. 编译:ASP引擎接收到请求后,首先会将ASP代码编译成可执行的二进制代码。
这个编译过程将确保代码的有效性,并生成一个可供执行的中间文件。
4. 执行:一旦ASP代码被成功编译成中间文件,ASP引擎将执行这个中间文件。
在执行过程中,ASP引擎会解释执行其中的脚本代码,并根据代码中的逻辑进行相应的操作。
5. 动态内容生成:在执行ASP代码的过程中,ASP引擎可以与数据库或其他外部资源进行连接和交互。
这使得ASP能够生成动态的网页内容,根据用户请求的不同动态地生成不同的页面。
6. 生成响应:在执行完ASP代码并生成动态内容后,ASP引擎将生成一个HTTP响应,并将该响应发送回Web服务器。
7. 发送响应:Web服务器将接收到的HTTP响应发送回用户的Web浏览器,并根据响应中的内容进行渲染和显示。
通过这个基本的工作流程,ASP实现了动态网页的生成和交互,使得网站能够根据用户的请求动态地生成内容,提供更丰富和个性化的用户体验。
文件上传原理
文件上传原理
文件上传原理是指将本地的文件通过网络协议发送到服务器端的过程。
在文件上传前,客户端需要先将文件切分成小的数据包,每个数据包都会附带一些元数据信息,比如文件名、文件大小等。
然后,客户端通过网络协议(如HTTP)将这些数据
包逐个发送给服务器。
在发送数据包之前,客户端和服务器需要建立连接。
通常使用TCP协议来建立可靠的连接,并通过握手过程确认连接已建立。
一旦连接建立成功,客户端就可以开始发送数据包了。
客户端将数据包发送给服务器的过程可以分为多个步骤。
首先,客户端会发送一个包含文件信息的请求,告诉服务器将要上传的文件的大小、文件名等信息。
服务器收到这个请求后会进行一系列的检查,比如检查文件是否已经存在、用户是否有权限上传等。
如果通过了检查,服务器会返回一个上传凭证给客户端。
接下来,客户端会将文件切分成小的数据包,并逐个发送给服务器。
在发送每个数据包之前,客户端会计算数据包的校验和,以便服务器端可以验证数据的完整性。
服务器收到数据包后会进行校验和的检查,如果数据包完整则会存储数据包的内容,否则会要求客户端重新发送。
一旦所有的数据包都被发送到服务器,客户端会向服务器发送一个上传完成的请求。
服务器在接收到请求后会进行一些后续的处理,比如将文件存储到指定的位置、更新数据库记录等。
总结来说,文件上传原理包括建立连接、发送文件信息、切分数据包、发送数据包、校验数据完整性、存储文件等步骤。
通过这个过程,客户端可以将本地的文件上传到服务器上,实现了文件共享和传输的功能。
应用ASP纯代码实现作业管理系统文件上传功能
【 要】 摘 通过“ 作业 管理 系统 ” 中的实例 , 细阐述 了数据库 的建立 、 详 文件存放位置 的设定 、 客户端输入页面及服务器端处理页 பைடு நூலகம்程序 的编写过程 , 以此来说明利用纯 AS P代码实现文件 上传 的方 法 , 同时将此方法的特点与其它常用 的上传方法进行 了比较 。 【 关键词 】 文件上传 ; 作业 ; 数据库 ; P代码 AS 【 中图分类号 】 3 30 3 TP 9 .9 【 文献标志码 】 A 【 文章编号 】0 7 5 0 2 0 )8—0 1 —0 10 —7 1 (0 6 0 07 2
2 方 法
图1 AS P与 Ac es 据 库 间的 关 系 cs 数
2 1 数据库的建立 . 本系统中采用 的是 Ac es cs 数据库 , 并通过 ADO( t e Aci X v DaaObet对象 , OL t jc ) 在 E DB技术 的支持下 , P可以完成 AS 与数据库 的连接与访 问。( P与 Aces数据库间 的关 系如 AS cs 图1 所示 )在 网站的根 目录下 , 建立一个名为 Daa ae md tb s . b
Fln me i a e C u s o re
( 用于存放作业名称 ) ( 于存放作业所属 的课程名称 ) 用
Ho wo kn m ( me r —u 用于存放 上传 是第 几次作业 )
Da ei tt me D wno d o la ( 用于存放上传作业的 日期与时间) ( 于存放下载路径 ) 用
o i s u l d wh c si p e e e y ASP p r o e ,m e n h l o p r s t e t e t e hi m e h d a d t e n f e p oa i h i m l m nt d b l u ec d s a w i c m a e he f a ur sbe we n t s e t o n h t a ii n lm e h d r g r i g t a s e rn n fls u o d. r d to a t o e a d n r n f r i g o i pl a e Ke r s i p o d; s i n e ; t b s ; y wo d :fl u l a a s g m nt da a a e ASP c d e o e
(转)ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器
(转)(C#)FileUpload实现上传限定类型和⼤⼩的⽂件到服务器上传⽂件有两个主要的⽬的地,⼀个是服务器,另⼀个是数据库,内置了FileUpload这个上传控件,⽂本框显⽰⽤户选择的⽂件的全名.其属性主要包括:ContenLength:上传⽂件⼤⼩,单位:字节FileName:⽂件名称HasFile:是否选择了⽂件例⼦:测试环境.net 2.0(内有详细说明)default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>default.aspx.csusing System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnUpload_Click(object sender, EventArgs e){Boolean fileOk = false;string path = Server.MapPath("~/upload/");//判断是否已经选取⽂件if (FileUpload1.HasFile){//取得⽂件的扩展名,并转换成⼩写string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();//限定只能上传jpg和gif图⽚string[] allowExtension = { ".jpg", ".gif", ".txt", ".xls" };//对上传的⽂件的类型进⾏⼀个个匹对for (int i = 0; i < allowExtension.Length; i++){if (fileExtension == allowExtension[i]){fileOk = true;break;}}//if (fileOk){resultlbl.Text = "要上传的⽂件类型不对!";}//对上传⽂件的⼤⼩进⾏检测,限定⽂件最⼤不超过1Mif (FileUpload1.PostedFile.ContentLength > 1024000){fileOk = false;}//最后的结果if (fileOk){try{FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName); resultlbl.Text ="上传成功";}catch{resultlbl.Text = "上传失败";}}else{resultlbl.Text = "⽂件类型或者⽂件⼤⼩超出1M或者⽂件类型不对"; }}}}。
在ASP.NET中实现多文件上传
在中实现多文件上传在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET,文件上传变得轻而易举。
下面的这个例子实现了多文件上传功能。
可以动态添加输入表单,上传的文件数量没有限制。
代码如下:MultiUpload.aspx后代码:MultiUpload.aspx.vbPublic Class MultiUploadInherits System.Web.UI.PageProtected WithEvents Upload As System.Web.UI.WebControls.ButtonProtected WithEvents MyTitle As belProtected WithEvents strStatus As bel#Region " Web Form Designer Generated Code "‘This call is required by the Web Form Designer.Private Sub InitializeComponent()End SubPrivate Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init‘CODEGEN: This method call is require d by the Web Form Designer‘Do not modify it using the code editor.InitializeComponent()End Sub#End RegionPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadMyTitle.T ext = "多文件上传"Upload.Text = "开始上传"If (Me.IsPostBack) Then Me.SaveImages()End SubPrivate Function SaveImages() As System.Boolean‘遍历File表单元素Dim files As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files‘状态信息Dim strMsg As New System.Text.StringBuilder("上传的文件分别是:")Dim iFile As System.Int32TryFor iFile = 0 To files.Count - 1‘检查文件扩展名字Dim postedFile As System.Web.HttpPostedFile = files(iFile) Dim fileName, fileExtension As System.StringfileName = System.IO.Path.GetFileName(postedFile.FileName)If Not (fileName = String.Empty) ThenfileExtension = System.IO.Path.GetExtension(fileName)strMsg.Append("上传的文件类型:" +postedFile.ContentType.ToString() + "")strMsg.Append("客户端文件地址:" + postedFile.FileName + "")strMsg.Append("上传文件的文件名:" + fileName + "")strMsg.Append("上传文件的扩展名:" + fileExtension + "")‘可根据扩展名字的不同保存到不同的文件夹postedFile.SaveAs(System.Web.HttpContext.Current.Reques t.MapPath("images/") + fileName)End IfNextstrStatus.Text = strMsg.ToString()Return TrueCatch Ex As System.ExceptionstrStatus.Text = Ex.MessageReturn FalseEnd TryEnd FunctionEnd ClassC# 版本UpLoad.aspx多文件上传UpLoad.aspx.csusing System;using System.Collections;using ponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;namespace WebPortal{////// UpLoad 的摘要说明。
ASP.NET对大文件上传的解决方案
对⼤⽂件上传的解决⽅案⾸先,我们需要下载这个名为 RanUpLoad 的组件。
下载完成之后,两个 dll ⽂件添加到项⽬的引⽤中区,xml ⽂件也要复制在项⽬中的 bin ⽂件夹下,也就是最后三个⽂件都要存在于 bin ⽂件夹中。
接着,上传控件还是⽤ 中⾃带的 FileUpload 控件,需要添加的就是在 FileUpload 控件旁边加⼊标签:<radU:RadProgressManager ID="Radprogressmanager1" Width="100%" runat="server" /><radU:RadProgressArea ID="progressArea1" Width="100%" runat="server"></radU:RadProgressArea>并且在 aspx ⽂件的起始处添加如下代码:<%@ Register TagPrefix="telerik" Namespace="Telerik.QuickStart" Assembly="Telerik.QuickStart" %><%@ Register TagPrefix="radU" Namespace="Telerik.WebControls" Assembly="2" %>当然,配置⽂件的 <system.web> 标签中不能忘记下⾯这些语句:<httpRuntime executionTimeout="3600" maxRequestLength="2097151" ></httpRuntime><httpModules> <add name="RadUploadModule" type="Telerik.WebControls.RadUploadHttpModule, 2"/></httpModules><httpHandlers> <add verb="*" path="Telerik.RadUploadProgressHandler.aspx" type="Telerik.WebControls.RadUploadProgressHandler, 2"></add> </httpHandlers>现在,外部的轮廓都已经布好了,接下来就是点击上传之后服务器端所需的操作:当然,做这些操作之前,我们先 using ⼀下 Telerik.WebControls 命名空间。
ASP网页上文件的上传和下载实现
ASP网页上文件的上传和下载实现摘要:在软件开发平台VS2012中进行软件开发, 通过用JS和C#语言对Web前端和后端的网页进行代码的编写开发, 使需要上传和下载的文件通过打开的Web网页进行本地的上传和客户端的下载, 从而达到设计应用的目的。
对Web前端和后端文件上传和下载技术进行了重点阐述, 把这个实现的过程详尽地展示出来。
关键词:编程环境; Web前端和后端; 本地的上传; 客户端的下载;Web客户端页面对文件的上传或者下载操作是开发过程中经常会用到的一项技术。
这项技术可以给用户带来非常方便的文件操作, 可以直接在网页上进行文件的上传或者下载。
通过Web网页上传或者下载的文件一般为除文件夹以外的其他文件, 例如压缩文件、Word文档、Excel文件、EXE应用文件等等。
所以在文件进行上传时, 要先对文件进行前期的处理, 使之成为可以上传的非文件夹文件。
经过处理后的文件才可以进行上传, 否则进行上传的文件将无法进行上传。
文件的下载是将处理好的非文件夹文件放置在一个指定的文件夹内, 通过Web页面显示出来, 点击打开链接然后进行文件的下载和保存。
1、文件的上传1.1 、文件上传实现过程在VS2012软件开发平台中, 首先要对需要上传的文件进行Web页面的控件选择, VS2012自带的文件上传控件为FileUpload, 选择此控件后, 还需要再添加一个Button按钮, 用来激活所选择需要上传的文件, 使这些控件置于WebForm页面上后进行控件的布局, 布局完成后, 再进行代码的编写。
图1 多文件上传设计图上传文件选择时, 控件FileUpload对文件的选择对话框, 会提示包括非文件夹以外的文件, 选择好需要上传的文件后, 控件会把所选择的文件名称及类型显示在页面上。
点击"文件上传";按钮, 就会把所选择的上传文件上传至服务器所在的指定文件夹里, 文件上传功能就实现了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASP文件上传原理分析及实现实例.txt我很想知道,多少人分开了,还是深爱着。
ゝ自己哭自己笑自己看着自己闹。
你用隐身来躲避我丶我用隐身来成全你!待到一日权在手,杀尽天下负我狗。
ASP文件上传原理分析及实现实例作者:风未起时来源:中国站长学院阅读3069 人次, 2006-2-15 14:16:00摘要:在基于/的应用环境中,上传各种类型的文件一直是困扰用户文件管理应用的难题之一。
在HTTP中上传文件有三种机制:RFC1867,PUT和WebDAV。
常用的实现方法是利用在RFC1867中引入的一个新类型:File以及ADO Stream对象。
本文对上述上传方法及实现原理作了论述,并给出了具体解决实例。
ASP FILE对象当前,基于/模式的应用比较流行。
当用户需要将文件传输到上时,常用方法之一是运行FTP并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的Web目录。
这就要求用户必须懂得如何使用FTP客户程序。
因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行的。
如果我们能把文件上传功能与Web集成,使用户仅用Web就能完成上传任务,这对于他们来说将是非常方便的。
但是,一直以来,由于File System Object的仅能传送文本文件的局限,所以ASP最大的难题就是文件上传问题。
下面介绍的就是如何在基于HTTP协议的网页中实现文件的上传。
一.通过HTTP上传的三种机制通过HTTP上传有三种机制:RFC1867, PUT 和WebDAV。
PUT 是在HTTP 引入了一个新的HTTP动词。
当web收到一个HTTP PUT和对象名字,它将会验证用户,接收HTTP流的内容,并把它直接存入web。
由于这可能会对一个web站点造成破坏,并且还会失去HTTP最大的优势:可编程性。
在PUT的情况下,自己处理请求:没有空间让CGI或者ASP应用程序介入。
唯一让你的应用程序捕获PUT的方法是在低层操作,ISAPI 过滤层。
由于相应的原因,PUT的应用很有限。
而WebDAV允许web内容的分布式认证与翻译。
它引入了几种新的HTTP动词,允许通过HTTP上传,锁定/解锁,登记/检验web内容。
Office 2000中的"Save to web" 就是通过WebDAV来实现的。
如果你所感兴趣的一切都是上传内容,WebDAV应用得非常出色,它解决了很多问题。
然而,如果你需要在你的web应用程序里面上传文件,WebDAV对你就毫无用处可言。
象HTTP PUT一样,那些WebDAV的动词是被解释的,而不是web应用程序。
你需要工作在ISAPI过滤层来访问WebDAV的这些动词,并在你的应用程序中解释内容。
RFC1867 最终被W3C在中接受前,是作为一种建议标准。
它是一种非常简单但是功能很强大的想法:在表单字段中定义一个新类型。
<INPUT TYPE="FILE">并且在表单本身加入了不同的编码方案,不再使用典型的:<FORM ACTION="" METHOD="POST">而是使用:<FORM ACTION="" METHOD="POST" ENCTYPE="multipart/form-data">这种编码方案在传送大量数据的时候,比起缺省的"application/x-url-encoded"表单编码方案,显得效率要高得多。
URL编码只有很有限的字符集,使用任何超出字符集的字符,必须用'%nn'代替,这里的nn表示相应的2个十六进制数字。
例如,即使是普通的空格字符也要用'%20' 代替。
而RFC1867使用多部分MIME编码,就象通常在e-mail消息中看到的那样,不编码来传送大量数据,而只是在数据周围加上很少的简单但实用的头部。
主要的厂商都采用了建议的"浏览..."按钮,用户能很容易的使用本地"打开文件..." 对话框选择要上传的文件。
RFC1867仍然将大多数文件上传的灵活方法留给了你的web应用程序。
PUT用得很有限。
WebDAV对内容的作者很有用,比如FrontPage用户,但是对想在web应用程序中加入文件上传的web开发者来说很少用到。
因此,RFC1867是在web应用程序中加入文件上传的最好的办法。
在实际应用中,免费提供了Posting Acceptor 。
ASP不懂"multipart/form-data" 编码方案。
取而代之,提供了Posting Acceptor ,Posting Acceptor是一种在上传完成后,接受REPOST到一个ASP页的ISAPI应用程序。
Software Artisans的SA-FileUp是最早的商业Active Server之一。
几经改进,现在作为一个纯粹的ASP存在。
二.基于ASP的文件上传实现原理分析基本原理是:采用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出,从中截取出所需的文件数据,以二进制文件方式存盘。
下面是上传文件页面的一个例子():<html><body><form name="Upload" Method="Post" Enctype="multipart/form-data"Action=""><input type="file" name="FileName"><INPUT TYPE="Submit" VALUE="Upload"></TD></form></body></html>程序中使用了文件对象,这样在中采用BinaryRead方法读来的原始数据就不仅仅是选择的文件本身的数据,还包含该文件在用户硬盘上的路径、类型、提交页面的表单等相关信息的描述,这样我们就需从中提取出文件的具体内容。
根据分析,数据的头部信息与数据的分界线是两对回车换行符,尾部也有分隔信息,我们可以采用类似以下的方法获取文件数据。
Dim ,DataStart,CLStr,DivStrFormSize=FormData=(FormSize)CLStr=ChrB(13)&ChrB(10)DataStart=InStrB&CLStr)+4'4是两对回车换行符的长度DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2FormData=MidB(FormData,DataStart,DataSize)FormData就是文件的内容了。
中间根据需要,可进行相应的处理。
最后的工作就是将文件保存了。
保存的方法可以有两种:一种是利用VB或VC之类程序中的二进制文件操作方法,在工程中加入适当的类型库,最终编译成DLL文件,使用时再将该DLL文件注册就可以了。
文件存贮程序如下:Public Function SaveFile(Pathname As String) As StringDim objContext As ObjectContextDim objRequest As RequestSet objContext=GetObjectContext()Set objRequest=objContext("Request")'以下的一段代码是进行文件存贮的有关操作Dim FormData() As Byte,CLStr,DivStrDim DataStart As Long,DataSize As LongDataSize=Redim FormData(DataSize-1)FormData=(DataSize)CLStr=ChrB(13) & ChrB(10)DataStart=InStrB(FormData,CLStr & CLStr)+4DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2FormData=MidB(FormData,DataStart,DataSize)'创建一个二进制文件并将FormData写入其中Open Pathname For Binary As 1Put #1,,FormDataClose #1SaveFile="OK!"End Function第二种方法是利用ADO STREAM中提供的二进制文件操作方法来完成,保存文件的语句是:(fileName,2)。
在这种操作中,我们可以将有关的操作存放在一个类文件中,在应用时,直接将该类文件包含在ASP程序中就可以了。
具体处理方法,请参阅有关介绍。
三.文件上传实现方法实例实现文件上传可使用或无方式。
对于类,比如说microsoft posting acceptor(简称mpa),就是公司发布的一个免费,这类的安装也比较方便。
对于的mpa,运行它的安装文件就可以了。
而一般的dll形式的,我们则需要进行注册。
例如,要使用,只要在Window 2000上执行regsvr32 [path\],系统出现注册成功的信息提示就可以使用该了;对于无类,如的无上传类-upload_5xsoft。
在使用时,只要在处理程序中包含以下的语句就可以了:<!--#include FILE=""-->set upload=new upload_5xSoft '建立上传对象有关的属性与操作方法,请参阅该的使用手册。
下面是詀为例,上传部分类型文件的源代码():<% @ language="vbscript"Set fileUP=("")=200000="d:\upfile"For i=0 tofieldname=(i)If (fieldname)="zip" Or (fieldname)="rar"ThenfieldnameEnd IfNextSet fileUP=Nothing%>四.结束语应用模式还在快速地发展着,在ASP.NET中,已经内置了文件上传的功能,使用非常简单方便。