PDA

Просмотр полной версии : Delphi, POST и кодировка файла


dos999
29.02.2008, 12:09
Клиент написан на Delphi отправляет файл

...
const
URL_POST = 'hots.ru/uploadtest.ashx';
...
procedure POSTFile(Filename: String);
var
TotalDataCount, i: Integer;
IdHTTP: TIdHTTP;
LPostStream: TIdMultiPartFormDataStream;
LResultStream: TStringStream;
LpostString: String;
function PostDecode(AString: String): String;
begin
Result := CharReplace(AString, '%', ' ');
Result := CharReplace(Result, '&', ' ');
end;
begin
IdHTTP := TIdHTTP.Create(nil);
try
IdHTTP.MaxLineLength := 0; //koi8-r windows-1252
LPostStream := TIdMultiPartFormDataStream.Create;
LpostString:= FileToString(Filename);
LPostStream.AddFormField('UserData', PostDecode(LpostString));
LResultStream := TStringStream.Create('');
try
try
IdHTTP.Post(URL_POST, LPostStream, LResultStream);
except
on E:Exception do
begin
Showmessage(E.Message);
end;
end;
showmessage(LResultStream.DataString);
finally
LPostStream.Free;
LResultStream.Free;
end;
finally
IdHTTP.Free;
end;
end;

файл uploadtest.ashx содержит скрипт
string x = "sdsdsd";
System.IO.File.WriteAllText(@"c:\text1.txt", x);

x это данные которые он принимает... файл сохраняеться но откуда то появляються лишние байты, пробовал менять кодировку, скорее всего дело в ней, но никак не могу подобрать нужную
Кто сталкивался с такой проблемой... прошу помоч.

Jes
29.02.2008, 12:34
всмысле 'лишние байты' ?

dos999
29.02.2008, 12:40
просматриваю полученный файл в хексе и вижу в некоторых строчках лишние байты, которые соответственно смещают код, пробовал менять кодировку ... приходт опять же похожий файл... но всё таки изменённый... и при каждой кодировке изменения эти разные.

А чёть не забыл, если это важно, исходный файл mdb, я его сжимаю в zip потом переименовываю в txt, оставшийся после отправки файл обратно распоковываеться нормально, а вот принятый никак...

dos999
29.02.2008, 18:36
Разобрался... надо просто было делать проще
LpostString:= FileToString(Filename);
LResultStream := TStringStream.Create(LpostString);
LPostStream.AddObject('UserData', 'image/GIF', LResultStream);
и потом постовать...

хз почему но файл приходит с 2 лишними байтами в начале(Enter)....пришлось просто при Get'е их обрубать...

Jes
04.03.2008, 13:42
файл приходит с 2 лишними байтами в начале(Enter).
вполне логично , они отделяют заголовок от самого контента ...
Closed...