Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Synaps отправить файл на сервер методом POST


Автор: Zlo 16.4.2013, 22:34
Есть функция которая  используя библиотеку Synaps отправляет файл на сервер:
Код

function HTTPPostFile(Const URL, FieldName, FileName: String; Const Data: TStream; Const ResultData: TStrings): Boolean;
const
  CRLF = #$0D + #$0A;
var
  HTTP: THTTPSend;
  Bound, Str: String;
begin
  Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
  HTTP := THTTPSend.Create;
  try
    Str := '--' + Bound + CRLF;
    HTTP.UserAgent:='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)';
    Str := Str + 'content-disposition: form-data; name="' + FieldName + '";';
    Str := Str + ' filename="' + FileName + '"' + CRLF;
    Str := Str + 'Content-Type: image/pjpeg' + CRLF + CRLF;
    HTTP.Document.Write(PAnsiChar(Str)^, Length(Str));
    HTTP.Document.CopyFrom(Data, 0);
    Str := CRLF + '--' + Bound + '--' + CRLF;
    HTTP.Document.Write(PAnsiChar(Str)^, Length(Str));
    HTTP.MimeType := 'multipart/form-data, boundary=' + Bound;
    Result := HTTP.HTTPMethod('POST', URL);
    ResultData.LoadFromStream(HTTP.Document);
  finally
    HTTP.Free;
  end;
end;

собственно скрипт на сервере ругается что имя файла не может быть пустым.
Сниффером посмотрел что отправляет программа:
Вот кусок вместе с заголовком
user posted image


А вот как это делает браузер:
user posted image

Не могу понять откуда там пробелы берутся...
Помогите плз разобраться

Автор: Чучмек 16.4.2013, 23:17
Zlo, какая делфа?

Автор: Чучмек 17.4.2013, 00:06
Zlo, Итак знаю - юникодная.
Цитата(Zlo @  16.4.2013,  22:34 Найти цитируемый пост)
Не могу понять откуда там пробелы берутся...

Это не пробелы, это #0.
Исправь 
Цитата(Zlo @  16.4.2013,  22:34 Найти цитируемый пост)
Str: String;
 на 
Код

Str: AnsiString;


Автор: Zlo 17.4.2013, 00:23
Чучмек, Гениально! Спасибо!

Автор: Akella 17.4.2013, 13:52
Цитата(Zlo @  16.4.2013,  22:34 Найти цитируемый пост)
const
  CRLF = #$0D + #$0A;

для этого есть готовая константа в дельфи: sLinesBreak;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)