如何使用multipart/form-data格式Post文件啊?(重奖300分啊!!!)(300分)

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

coolnet

Unregistered / Unconfirmed
GUEST, unregistred user!
我用D6带的Indy的HTTPClient,在ContentType中设了multipart/form-data,但Post文件后
发现发送的时候没有boundary,即是以一个整体发过去的,与通过IE浏览器发送文件相比,
ContentType中少了boundary和其他的一些信息,发送的信息也没有像IE那样用boundary
分割开来,现在是发送一个文件,如果想一次Post两个文件,接收方就无法分割两个文件。
程序如下:
urlStr := 'http://10.0.1.12/dev//wfd/WFDServlet';
responseStream := TStringStream.Create('');
try
sourceStream := TMemoryStream.Create;
try
sourceStream.LoadFromFile(xmlFileName);
//HTTPClient是Indy的IdHTTP Client控件
HTTPClient.ProtocolVersion := pv1_1;
HTTPClient.Request.ContentType := 'multipart/form-data';
HTTPClient.Post(urlStr, sourceStream, responseStream);
finally
sourceStream.Free;
end;

if HTTPClient.ResponseCode = 200 then
begin
if Trim(responseStream.DataString) = '800 success' then
begin
ShowMsg('传输成功!');
end
else
begin
ShowMsg('传输失败!失败原因:' + Trim(responseStream.DataString));
end;
end
else
begin
ShowMsg('传输失败!失败原因:连接服务器失败!(' + HTTPClient.ResponseText + ')');
end;
finally
responseStream.Free;
end;
 
没有人知道吗?
偶很急的说
 
要是嫌分不够,偶还可以再加的说
 
沒用過這個東西﹐但我想你只用了下面一條語句
sourceStream.LoadFromFile(xmlFileName);
就是只讀了一個文件啊﹐怎么會分開多個文件呢?
 
但是用IE发文件的时候,即使只发一个文件也有boundary的,
而且我试过把两个文件合并到一个Stream里发送,中间没有Boundary分割
 
如果控件有這個功能﹐應該是用 ADD 這類的方法把 stream 加上去﹐而不是
簡單的合到一個流中就post
 
Indy控件好像没有这个功能,谁知道其他什么控件可以按标准格式发送文件的?
NMHTTP好像也不行
 
将ie发送文件的数据流读一下你就知道了,或者去w3c看看http1.1的标准

自己生成Binary数据流,发送到服务器就可以了

你可以问一问做网络程序的人,高手应该很清楚(asp、jsp等[8D])
 
难道要自己生成分隔符,拼成一个流,再发送吗?
偶这里没有高手啊,pely大侠再指点指点吧
 
写了一个例子程序,其中有一个unit,你看看应该就会用了
留个信箱给我,我发给你
 
coolnet@cnuninet.com
谢谢!
 
to pely
已收到你的邮件,但无法解压 :(
我用的是WinRAR 2.80
 
多人接受答案了。
 
pely, coolnet, 能给我一个unit文件么?tiyi@163.com,多谢!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2393713
帮帮我!!!!!!!!!救命啊!!!!!!!!!!
 
后退
顶部