WEB开发网
开发学院WEB开发ASP 用Delphi 6开发ASP上传组件详解 阅读

用Delphi 6开发ASP上传组件详解

 2007-12-09 12:51:04 来源:WEB开发网   
核心提示:Content-Disposition: form-data; 说明这是表单中的域,name="mefile"; 域的名称,用Delphi 6开发ASP上传组件详解(2),filename="C:\Documents and Settings\aaa\My Documents\My Pic

Content-Disposition: form-data; 说明这是表单中的域。
name="mefile"; 域的名称。
filename="C:\Documents and Settings\aaa\My Documents\My Pictures\zzjh.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组件提供了极好的支持,大大简化了我们的开发过程。
  启动Delphi 6,选择File-New-Other-ActiveX-ActiveX Library,这样就建立了一个ActiveX库。将此Library改名为myobj,存盘。选择File-New-Other-ActiveX-Active Server Object,在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}']
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure OnEndPage; safecall;
function Get_Form(Formname: OleVariant): OleVariant; safecall;
function Get_FileName: OleVariant; safecall;
function Get_FileSize: Integer; safecall;
procedure FileSaveAs(FileName: OleVariant); safecall;
function Get_FileData: OleVariant; safecall;
function Get_FileType: OleVariant; safecall;
property Form[Formname: OleVariant]: OleVariant read Get_Form;
property FileName: OleVariant read Get_FileName;
property FileSize: Integer read Get_FileSize;
property FileData: OleVariant read Get_FileData;
property FileType: OleVariant read Get_FileType;
end;

  其中的OnStartPage方法和OnEndPage方法是Delphi默认生成的,其它的是手动加入的。
  切换到unit1.pas(也是Delphi自动生成的),改名为upfile.pas存盘。可以看到存在一个Tupfile类的声明,它是继承自TASPObject类和Iupfile接口的。Delphi 6已经自动生成了相应的代码。接下来的任务就是实现这个接口。
  除了完成Iupfile接口中的属性和方法之后,还需要补充一些东西,以便完成我们的任务。最终的Tupfile类的声明如下:

Tupfile = class(TASPObject, Iupfile)
public
protected
procedure OnEndPage; safecall; //页面开始
procedure OnStartPage(const AScriptingContext: IUnknown); safecall; //页面结束
procedure FileSaveAs(Filename: OleVariant); safecall; //保存文件
function Get_Form(Formname: OleVariant): OleVariant; safecall; //
function Get_FileName: OleVariant; safecall;
function Get_FileSize: Integer; safecall;
function Get_FileData: OleVariant; safecall;
function Get_FileType: OleVariant; safecall;
private
FContentData:string;
FFileData,FFileName,FFileType:string;

上一页  1 2 3 4  下一页

Tags:Delphi 开发 ASP

编辑录入:coldstar [复制链接] [打 印]
赞助商链接