私は、ユーザーがファイルを 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;