Код функции по отправке файла
Автор: Eric Paschoalick Chaves
function HttpPostFileForm(const URL, FieldName, FileName: string; const Data: TStream; const FormFields:TStrings; const ResultData:
TStrings): Boolean;
var
HTTP: THTTPSend;
Bound, s: AnsiString;//был string, но для России не катит ( ! )
i:integer;
const
CRLF=#13#10;
FIELD_MASK = CRLF + '--%s' + CRLF +'Content-Disposition: form-data; name="%s"' + CRLF + CRLF+'%s';
begin
Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
HTTP := THTTPSend.Create;
try
s := '--' + Bound + CRLF;
s := s + 'content-disposition: form-data; name="' + FieldName +'";';
s := s + ' filename="' + FileName +'"' + CRLF;
s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF;
HTTP.Document.Write(Pointer(s)^, Length(s));
HTTP.Document.CopyFrom(Data, 0);
// Include formfield
for i:=0 to FormFields.Count-1 do
begin
S:= Format(FIELD_MASK,[Bound, FormFields.Names[I],FormFields.Values[FormFields.Names[I]]]);
HTTP.Document.Write(Pointer(S)^, Length(S));
end;
s := CRLF + '--' + Bound + '--' + CRLF;
HTTP.Document.Write(Pointer(s)^, Length(s));
HTTP.MimeType := 'multipart/form-data, boundary=' + Bound;
Result := HTTP.HTTPMethod('POST', URL);
ResultData.LoadFromStream(HTTP.Document);
finally
HTTP.Free;
end;
end;
Пример использования
procedure TForm1.Button1Click(Sender: TObject);
var Data:TFileStream;
FormFields:TStrings;
FileName:String;
begin
FileName:='/home/theo/test.zip';
Data:=TFileStream.Create(FileName, fmOpenRead);
FormFields:=TStringList.Create;
FormFields.Add('Feld2=testen');
FormFields.Add('Feld3=sie mit');
HttpPostFileForm('http://localhost/theohome/php/listpost.php',
'Feld1',
ExtractFileName(FileName),
Data,
FormFields,
Memo1.lines);
Data.Free;
FormFields.free;
end;
Возможно кому нибудь пригодиться
Большое спасибо, очень помогло.
ОтветитьУдалитьУвидеть бы по больше Ваших функций =)
Спасибо!
УдалитьБольше? так вам сюда
http://www.webdelphi.ru/synapse/