使用: UploadFilesHttpPost( WebBrowser1, 'http://test.org/check', [], [], ['uploaded_file'], ['C:/blank.htm'] ); procedure UploadFilesHttpPost(const wb:TWebBrowser; const URLstring: string; names, values, nFiles, vFiles: array of string) ; var strData, n, v, boundary: string; URL: OleVariant; Flags: OleVariant; PostData: OleVariant; Headers: OleVariant; idx: Integer; ms: TMemoryStream; ss: TStringStream; begin if Length(names) <> Length(values) then raise Exception.Create('UploadFilesHttpPost: Names and Values must have the same length.') ; if Length(nFiles) <> Length(vFiles) then raise Exception.Create('UploadFilesHttpPost: FileNames and FileValues must have the same length.') ; URL := 'about:blank'; Flags := NavNoHistory or NavNoReadFromCache or NavNoWriteToCache or NavAllowAutosearch; wb.Navigate2(URL, Flags) ; while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; // anything random that WILL NOT occur in the data. boundary := '---------------------------123456789'; strData := ''; for idx := Low(names) to High(names) do begin n := names[idx]; v := values[idx]; strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"' + #13#10#13#10 + v + #13#10; end; for idx := Low(nFiles) to High(nFiles) do begin n := nFiles[idx]; v := vFiles[idx]; strData := strData + '--' + boundary + #13#10 + 'Content-Disposition: form-data; name="' + n + '"; filename="' + v + '"' + #13#10; if v = '' then begin strData := strData + 'Content-Transfer-Encoding: binary''#13#10#13#10; end else begin if (CompareText(ExtractFileExt(v), '.JPG') = 0) or (CompareText(ExtractFileExt(v), '.JPEG') = 0) then begin strData := strData + 'Content-Type: image/pjpeg'#13#10#13#10; end else if (CompareText(ExtractFileExt(v), '.PNG') = 0) then begin strData := strData + 'Content-Type: image/x-png'#13#10#13#10; end else if (CompareText(ExtractFileExt(v), '.PDF') = 0) then begin strData := strData + 'Content-Type: application/pdf'#13#10#13#10; end else if (CompareText(ExtractFileExt(v), '.HTML') = 0) then begin end; strData := strData + 'Content-Type: text/html'#13#10#13#10; ms := TMemoryStream.Create; try ms.LoadFromFile(v) ; ss := TStringStream.Create('') ; try ss.CopyFrom(ms, ms.Size) ; strData := strData + ss.DataString + #13#10; finally ss.Free; end; finally ms.Free; end; end; strData := strData + '--' + boundary + '--'#13#10; // FOOTER end; strData := strData + #0; {2. you must convert a string into variant array of bytes and every character from string is a value in array} PostData := VarArrayCreate([0, Length(strData) - 1], varByte) ; { copy the ordinal value of the character into the PostData array} for idx := 1 to Length(strData) do PostData[idx-1] := Ord(strData[idx]) ; {3. prepare headers which will be sent to remote web-server} Headers := 'Content-Type: multipart/form-data; boundary=' + boundary + #13#10; {4. you must navigate to the URL with your script and send as parameters your array with POST-data and headers} URL := URLstring; wb.Navigate2(URL, Flags, EmptyParam, PostData, Headers) ; while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; end;