首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你能用TIdHTTP背靠背地把帖子发到网站上吗?

你能用TIdHTTP背靠背地把帖子发到网站上吗?
EN

Stack Overflow用户
提问于 2013-06-22 02:15:39
回答 1查看 721关注 0票数 1

我有一个程序,它充当web服务器和用户之间的接口,允许用户将文件上传到web服务器。当用户单击"Upload“时,它会从列表视图中获取信息并将其发送到网站,第一个http.Post用于实际文件,第二个用于我存储的有关该文件的元数据。

当我注释掉第一个Post语句时,它工作得很好,实际上发布了数据,但当它们都在那里时,它似乎没有获得第二个语句的任何参数。当我在web浏览器中使用Param中的值运行脚本时,它也会起作用。

UFile是包含文件元数据的记录。

代码语言:javascript
复制
  IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
  http := TIdHTTP.Create(nil);
  http.IOHandler := IOHandler;
  Param := TStringList.Create;
  DataParams := TIdMultiPartFormDataStream.Create;
  Stream := TStringStream.Create('');
  DebugStream := TStringStream.Create('');

  Param.Add('serial='+UFile.Serial);
  Param.Add('filename='+UFile.Name);
  Param.Add('filepath='+'\'+UFile.Serial+'\'+IntToStr(UFile.PatchID));
  Param.Add('patchid='+IntToStr(UFile.PatchID));
  Param.Add('patchnotes='+UFile.PatchNotes);
  Param.Add('earliestversion='+UFile.EarliestVersion);
  Param.Add('latestversion='+UFile.LatestVersion);
  Param.Add('date='+DateToStr(UFile.Date));
  Param.Add('execaftersend='+BoolToStr(UFile.ExecAfterSend));

  DataParams.AddFile('file', UFile.FilePath, 'application/octet-stream');

  try
    http.Post('http://example.com/postFile.php', DataParams, Stream);
    ShowMessage(Stream.DataString);
    http.Post('http://example.com/uploadFiles.php', Param, DebugStream);
    ShowMessage(DebugStream.DataString);
    for J := 0 to Pred(Param.Count) do
      DebugStrings := DebugStrings + '&' + Param.Strings[J];
    ShowMessage(DebugStrings);
  except
    on E: EIdHTTPProtocolException do
    begin
      ShowMessage('Error code:' + IntToStr(E.ErrorCode));
    end
  end;
EN

Stack Overflow用户

发布于 2013-06-24 22:15:41

虽然这并不能真正解决做两篇文章的问题,但它确实允许你上传包含其他数据的文件,这就是为什么我一开始做两篇文章的原因。

使用TIdMultiPartFormDataStream并添加您的文件AddFile,然后使用AddFormField添加任何其他数据。

示例:

代码语言:javascript
复制
  DataParams.AddFile('file', UFile.FilePath, 'application/octet-stream');
  DataParams.AddFormField('serial', UFile.Serial);
  DataParams.AddFormField('filename', UFile.Name);
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17241795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档