idhttp 怎么同时post 文本和二进制流

jinhx 2018-08-16 03:21:48
其实类似于上传文件,但由于数据是在内存中的,我不希望保存到文件再上传,上传到WEB服务器后也不希望保存成文件。
我目前只知道单一数据类型的上传,只是文本,或只是数据流。
比如我想上传一个图片,既要有名称,也要有图片本身
...全文
395 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdonghai 2018-08-28
  • 打赏
  • 举报
回复
自己定义一个简单的消息格式,数据长度1,数据1,数据长度2,数据2
客户端:

procedure TForm1.Button1Click(Sender: TObject);
var
iLen:integer;
sFN,sPath:string;
MS,MS2:TMemoryStream;
begin
MS:=TMemoryStream.Create;
try
sPath:='c:\1.bmp';
sFN:=ExtractFileName(sPath);
iLen:=length(sFN);
MS.WriteBuffer(iLen,sizeof(iLen));
MS.WriteBuffer(sFN[1],iLen);
MS2:=TMemoryStream.Create;
MS2.LoadFromFile(sPath);
iLen:=MS2.Size;
MS.WriteBuffer(iLen,sizeof(iLen));
MS.CopyFrom(MS2,iLen);
MS2.Free;
IDHTTP1.post('http://127.0.0.1:114',MS,nil);
finally
MS.Free;
end;
end;


服务端:

procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
iLen:Integer;
sData,sFN:string;
MS:TMemoryStream;
pData:PChar;
begin
sData:=ARequestInfo.UnparsedParams;
if sData<>'' then
begin
MS:=TMemoryStream.Create;
try
MS.WriteBuffer(sData[1],length(sData));
MS.Position:=0;
MS.ReadBuffer(iLen,sizeof(iLen));
SetLength(sFN,iLen);
MS.ReadBuffer(sFN[1],iLen);
MS.ReadBuffer(iLen,sizeof(iLen));
GetMem(pData,iLen);
MS.ReadBuffer(pData^,iLen);//pData里面保存的就是图片数据
(*
MS.Clear;
MS.WriteBuffer(pData^,iLen);
MS.SaveToFile('f:\'+sFN);
*)
finally
MS.Free;
end;
end;
end;
sanyuan35 2018-08-22
  • 打赏
  • 举报
回复
有人没人回答一下。。我也想知道

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧