VC编写ISAPI程序,如何得到客户端Web浏览器上传的文件?

我在用VC6/MFC编写ISAPI程序
现在需要客户端上传一个Bitmap文件
我应该怎么用CHttpServer类接受

大虾指点:)

---------------------------------------------------------------

CHttpServerContext.ReadClient(LPVOID lpvBuffer,LPDWORD lpdwSize);

lpvBuffer是读到的字符串,lpdwSize是读取的长度

---------------------------------------------------------------

我自己找到资料了,谢谢大虾指点

首先看一段post的HTML

1<form action="test.asp" enctype="multipart/form-data" method="post" name="mainForm">
2<input name="mefile" type="file"/>
3<input name="a1" type="hidden" value="fdsaf"/>
4<input name="a2" type="hidden" value="这个是这个"/>
5<input name="ok" type="submit" value="OK"/>
6</form>

这个文件里包含了一个名为mainForm的form,以及随手写的一些input域。注意这个form和一般的form有两个不同的地方:一是它有一个type=file的域,没有value。用浏览器打开这个文件时,这个域会表现为一个右侧有“浏览”字样的文件输入框,用户可以通过它来选择本地硬盘上的文件。二是form有一个特殊的属性:enctype="multipart/form-data"。这个属性告诉浏览器要上传二进制文件,并进行相应编码。
这种编码会产生什么样的表单信息呢?用一段asp代码的功能是将表单的原始信息返回:

1   
2formsize=request.totalbytes '获得表单原始信息的长度   
3formdata=request.binaryread(formsize) '读取表单原始信息   
4response.binarywrite formdata '返回表单原始信息   

它的运行效果:

-----------------------------7d2227629012e Content-Disposition: form-data; name="mefile"; filename="C:\Documents and Settings\aaa\My Documents\My Pictures\zzjh.jpg" Content-Type: image/pjpeg (作者注:以下为乱码) -----------------------------7d2227629012e Content-Disposition: form-data; name="a1" fdsaf -----------------------------7d2227629012e Content-Disposition: form-data; name="a2" 这个是这个 -----------------------------7d2227629012e Content-Disposition: form-data; name="ok" OK -----------------------------7d2227629012e--

这就是用"multipart/form-data"方式编码的表单原始信息。其中那一段看起来是乱码的部分,就是jpg图片的编码。(实际的jpg图片编码可能要比这长得多,视文件大小而定。为了行文方便只保留了一小部分。)
分析一下这段信息的格式:

-----------------------------7d2227629012e 这是各个域之间的分隔符。
Content-Disposition: form-data; 说明这是表单中的域。
name="mefile"; 域的名称。
filename="C:\Documents and Settings\aaa\My Documents\My Pictures\zzjh.jpg" 上传文件在本地硬盘上的名称。
Content-Type: image/pjpeg 文件类型。
后面是文件本身的数据。
其它各个域的信息也可以以此类推。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus