1

私は、ユーザーがファイルを Web サーバーにアップロードできるようにする Web サーバーとユーザーの間のインターフェースとして機能するプログラムを持っています。ユーザーが「アップロード」をクリックすると、リストビューから情報が取得され、Web サイトに送信されます。最初の http.Post は実際のファイル用で、2 番目は保存しているメタデータ用です。

最初の Post ステートメントをコメントアウトすると、問題なく動作し、実際にデータを投稿しますが、両方がそこにある場合、2 番目のステートメントのパラメーターは取得されないようです。Param の値を使用して Web ブラウザーでスクリプトを実行するときにも機能します。

UFile は、ファイルのメタデータを含むレコードです。

  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;
4

1 に答える 1