关于CGI/ISAPI表单的提交... 300分!(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
问题一:
我想做一个文件上载的CGI/ISAPI,不想用CGI Expert(不过用它确实
非常方便),我想知道如何读取上载的文件数据.请问有没有做过这个
的富翁,点拨一下!

问题二:
我的CGI/ISAPI读取客户端的数据一直是用的request.contentfields
等,但今天我看到一篇文章说,如果客户端发送的数据大于48k,就只能用
request.readclient来读取剩下的内容,不知是不是果真如此?
而且,我用如下方法使用readclient,CGI死锁,没有反应:
var buf:pchar;
count:integer;
begin
count:=request.contentlength;
getmem(buf,count);
request.readclient(buf,count);
response.content:=strpas(buf);
freemem(buf);
end;
这个问题和第一个问题关系不大,这个只是一个普通的提交表单,因为这个
表单的内容可能非常大,里面有大量的数据,大概有50K左右,这样的表单数
据提交到server,用request.contentfields来读取有没有问题?
我最初提交的表单数据有140k!在公司的专线机器上没有问题,但在家里
的拨号机器上,似乎发生了数据丢失....现在我将表单数据结果改动了
一下,数据量少了不少,但一旦运行起来也可能会达到50k左右,会不会有问题?

<br>
每个问题150分,请踊跃回答. 谢谢!!!
 
2.超过48K是会引起数据丢失的,你的问题还是会存在的。
 
1. 建议你还是用cgiexpert, 简单许多:-) 否则, 我有个vb的例子, 你要不要?
2. var buf:string;
count,i:integer;
begin
count:=request.contentlength;
count:=1024;
for i:=0 to cell(request.contentlength/count)-1 do
begin
if count*(i+1)>request.contentlength then
count:=request.countentlength-count*i;
buf:=buf+request.readstring(count);
end;
 
补充: 如果数据比较大, 要用post而不能用get, 另外, 之所以丢失是因为提交数据
太慢造成的.
 
to cytown: 如果"之所以丢失是因为提交数据太慢造成的",那么岂不是任何方法
也解决不了了? 因为数据无法再缩小了,而且拨号网络无法再快了.

我不用cgiexpert. 也不要vb的代码. 我要delphi的代码.

 
呵呵,我跟1,我跟2
为什么不用CGI-EXPERT呢?哪里不好吗?
 
呵呵, 其实vb的解决方法delphi可以借用呀:-)
content会丢失数据, 但readstring, readclient没有这个问题, 这是因为他们使用
的机制不一样.
 
to cytown: 那能不能拜托你老人家给翻译成delphi的code呢? VB里面的函数和
delphi都不一样,不知道该怎么转化---而且我实在不想再研究VB了.

另外,你上面的代码是不是有问题?
count:=request.contentlength;
count:=1024; //这里为什么要重复赋值呢?

cell又是个什么东西呢?

另外,readstring能否读取二进制内容? readclient怎么用?

to cj: 因为我的这个工程以前是用delphi自己写的,已经写了很多了,如果现在
用cgi exp,只能要不全部重新写过,要不做一个单独的上载用的cgi,我不
愿意. 而且,CGI exp的实现方式很奇怪,我看不懂原理,万一以后出错
都不知道怎么回事,还是自己写保险点.:-)
 
呵呵, vb中使用的基本上都是api, 不用特殊vb函数的说.
count:=request....是忘了删了:-)
cell写错, 是ceil
readstring可以读二进制没问题:-)
readclient用法是if request.readclient(buf,count)=count then....
建议你还是建立一个循环, 一点一点的读, 如count=16k?
 
cytown: 明白很多了.
那把你的VB的例子发给我吧! cakk2000@163.net
 
pls tell me "cgi-expert"是什么东东?
 
to KCZ: cgi-expert 是一个专门开发CGI/ISAPI的控件组,功能强大.

to cytown: 我正在研究你给我的例子,等搞定后就给分. :-)
 
cytown: 看了你的例子,不太满意,他是通过一个activex dll来实现的.

另外,你给我的readstring的例子不能用,程序死掉了,没有任何回应.

我准备用cgi-exp了,用之前有一个疑问: cgi-exp是否能够"自动"处理
表单数据大于48k的情况?
 
这两天真奇怪,添加注释总不成功,只有先随便添点东西提交,下次才能正常
提交注释. :-(
 
? 仔细看了看, vb的例子确实是有问题, 用的是ftp的方式:-< 该死的东西! 不过,
给你的文章看了看, 虽然是activex, 但可以改写成delphi的exe的.

readstring不能用? 真是奇怪!

cgi-expert肯定能自动处理>48k的情况.

分等我找到解决办法再找你要:-)
 
根据我的经验:
大部分的CGI用DELPHI,
只是在二种情况下用CGI EXPERT
1: upload
2: isapi FILTER.

CGI EXPERT这方面做的很好,(只有一点BUG)
没有理由不用,只是加一个控件而已.
 
我试了一下cgi expert,很好用啊,为什么不用呢?
有控件的话,不用什么都从头做起吧!
 
主要是CGI Exp的实现方式很奇怪,不太习惯,而且好像跟一般语言的方式都不一样.

比如无法象delphi那样添加不同的WebActionItem,并且无法判断pathinfo.
 
后退
顶部