仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 527|回复: 10
打印 上一主题 下一主题

[学习教程] ASP网页设计用Delphi 6开辟ASP上传组件详解

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:58:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。上传|详解文件上传是WEB开辟中常常要用到的功效,但ASP自己和内置的组件都不撑持文件上传功效。网下流传的一些第三方组件固然可以办理这个成绩,但年夜多是要免费的,更别说OpenSource了。本文将具体分析WEB文件上传的道理,和一步步引导读者怎样用Delphi6开辟一个ASP上传组件。

1Html文件剖析
  起首我们来看一个html文件源码,文件名是test.htm,功效是供应用户上传的界面:

<html>
<body>
<center>
  <formname="mainForm"enctype="multipart/form-data"
action="test.asp"method=post>
    <inputtype=filename=mefile><br>
<inputtype=hiddenname=a1value="fdsaf">
<inputtype=hiddenname=a2value="fdsaf">
<inputtype=hiddenname=a3value="fdsaf">
<inputtype=hiddenname=a4value="fsdfsdsaf">
<inputtype=hiddenname=a5value="这个是这个">
<inputtype=textname=a6value="fdsaf">
  <inputtype=submitname=okvalue="OK">
  </form>
</center>
</body>
</html>

  这个文件里包括了一个名为mainForm的form,和顺手写的一些input域。注重这个form和一样平常的form有两个分歧的中央:一是它有一个type=file的域,没有value。用扫瞄器翻开这个文件时,这个域会体现为一个右边有“扫瞄”字样的文件输出框,用户能够经由过程它来选择当地硬盘上的文件。二是form有一个特别的属性:enctype="multipart/form-data"。这个属性告知扫瞄器要上传二进制文件,并举行响应编码。
  这类编码会发生甚么样的表单信息呢?让我们来看看test.asp,也就是承受表单的asp文件的源码,它十分复杂:

<%
formsize=request.totalbytes  取得表单原始信息的长度
formdata=request.binaryread(formsize)  读取表单原始信息

response.binarywriteformdata  前往表单原始信息
%>

  如读者在正文中懂得的,这段代码的功效是将表单的原始信息前往。让我们来看看它的运转效果。将这两个文件置于web目次下,会见test.htm。在文件输出框中,选择一个文件(我选了一个jpg图片,不外最年夜不要太年夜)。提交,然后能够看到如许一堆七零八落的信息:

-----------------------------7d2227629012eContent-Disposition:form-data;name="mefile";filename="C:DocumentsandSettingsaaaMyDocumentsMyPictureszzjh.jpg"Content-Type:image/pjpeg(作者注:以下为乱码)-----------------------------7d2227629012eContent-Disposition:form-data;name="a1"fdsaf-----------------------------7d2227629012eContent-Disposition:form-data;name="a2"fdsaf-----------------------------7d2227629012eContent-Disposition:form-data;name="a3"fdsaf-----------------------------7d2227629012eContent-Disposition:form-data;name="a4"fsdfsdsaf-----------------------------7d2227629012eContent-Disposition:form-data;name="a5"这个是这个-----------------------------7d2227629012eContent-Disposition:form-data;name="a6"fdsaf-----------------------------7d2227629012eContent-Disposition:form-data;name="ok"OK-----------------------------7d2227629012e--

  这就是用"multipart/form-data"体例编码的表单原始信息。个中那一段看起来是乱码的部分,就是jpg图片的编码。(实践的jpg图片编码大概要比这长很多,视文件巨细而定。为了行文便利,作者只保存了一小部分。)
  剖析一下这段信息的格局:  

-----------------------------7d2227629012e这是各个域之间的分开符。
Content-Disposition:form-data;申明这是表单中的域。
name="mefile";域的称号。
filename="C:DocumentsandSettingsaaaMyDocumentsMyPictureszzjh.jpg"上传文件在当地硬盘上的称号。
Content-Type:image/pjpeg文件范例。
前面是文件自己的数据。

  别的各个域的信息也能够以此类推。
  尽人皆知,在ASP中,利用request工具,能够会见用户提交表单的各个域。由于request工具会对原始的表单信息举行剖析,提掏出表单中每一个域的值。可是,request其实不能剖析这"multipart/form-data"格局的表单信息。这就是ASP不克不及间接撑持文件上传的缘故原由地点。读者能够尝尝,在test.asp中,用request("mefile")如许的格局,是不克不及读取到准确的信息的。
  成绩的关键已找到,办理的思绪也很复杂:用Delphi开辟一个COM组件,承受这类原始表单信息,将各个域逐一提掏出来,前往给asp文件。也就是完成request工具没有完成的功效。

2用Delphi开辟组件

  Delphi6对开辟ASP组件供应了极好的撑持,年夜年夜简化了我们的开辟历程。
  启动Delphi6,选择File-New-Other-ActiveX-ActiveXLibrary,如许就创建了一个ActiveX库。将此Library更名为myobj,存盘。选择File-New-Other-ActiveX-ActiveServerObject,在CoClassname中填进upfile,断定。这时候会跳出一个题目为myobj_tlb的对话框,这是Delphi独有的以可视化体例编纂COM接口的功效,用Delphi开辟过COM的读者应当对照熟习。
  在myobj下的名为Iupfile的Interface下,增加5个属性和一个办法。假如不明白怎样操纵,请拜见Delphi参考书的相干部分。按F12能够看到天生的响应的myobj_tlb.pas文件,个中的Iupfile接口应当是这个模样:

Iupfile=interface(IDispatch)
[{5C40D0EB-5A22-4A1E-8808-62207AE04B51}]
procedureOnStartPage(constAScriptingContext:IUnknown);safecall;
procedureOnEndPage;safecall;
functionGet_Form(Formname:OleVariant):OleVariant;safecall;
functionGet_FileName:OleVariant;safecall;
functionGet_FileSize:Integer;safecall;
procedureFileSaveAs(FileName:OleVariant);safecall;
functionGet_FileData:OleVariant;safecall;
functionGet_FileType:OleVariant;safecall;
propertyForm[Formname:OleVariant]:OleVariantreadGet_Form;
propertyFileName:OleVariantreadGet_FileName;
propertyFileSize:IntegerreadGet_FileSize;
propertyFileData:OleVariantreadGet_FileData;
propertyFileType:OleVariantreadGet_FileType;
end;

  个中的OnStartPage办法和OnEndPage办法是Delphi默许天生的,别的的是手动到场的。
  切换到unit1.pas(也是Delphi主动天生的),更名为upfile.pas存盘。能够看到存在一个Tupfile类的声明,它是承继自TASPObject类和Iupfile接口的。Delphi6已主动天生了响应的代码。接上去的义务就是完成这个接口。
  除完成Iupfile接口中的属性和办法以后,还必要增补一些器材,以便完成我们的义务。终极的Tupfile类的声明以下:

Tupfile=class(TASPObject,Iupfile)
public
protected
procedureOnEndPage;safecall;//页面入手下手
procedureOnStartPage(constAScriptingContext:IUnknown);safecall;//页面停止
procedureFileSaveAs(Filename:OleVariant);safecall;//保留文件
functionGet_Form(Formname:OleVariant):OleVariant;safecall;//
functionGet_FileName:OleVariant;safecall;
functionGet_FileSize:Integer;safecal
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-20 06:53:14 | 只看该作者
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
小女巫 该用户已被删除
板凳
发表于 2015-1-25 05:56:30 | 只看该作者
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
小妖女 该用户已被删除
地板
发表于 2015-1-25 16:08:07 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
透明 该用户已被删除
5#
发表于 2015-1-26 22:32:55 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
老尸 该用户已被删除
6#
发表于 2015-2-4 21:03:38 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
乐观 该用户已被删除
7#
发表于 2015-2-10 10:34:14 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
再见西城 该用户已被删除
8#
发表于 2015-3-1 09:00:25 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
简单生活 该用户已被删除
9#
发表于 2015-3-10 13:00:37 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
爱飞 该用户已被删除
10#
发表于 2015-3-17 07:27:05 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
只想知道 该用户已被删除
11#
发表于 2015-3-24 02:17:21 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 03:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表