-
OtherSide (13.08.13 00:24) [0]Добрый всем день. Надеюсь, что я еще не надоел :) Пытаюсь сделать upload файлов с помощью TIdHTTPServer. Пробую забрать поток из ARequestInfo.PostStream. Побродил по интернету, увидел, что он, возможно, будет закодирован в MIME. Увидел в ARequestInfo.PostStream кучу байт, никак не связанных ни с MIME ни с пересылаемым файлом (пробую переслать простой тектовый файл хотя бы). Пересылаемый файл занимает 17 байт, содержит надпись 'this is test file', присылаемые данные - куча каких-то непонятных байтов:
http://zalil.ru/34674531 -
Ошибка в 17 строке у тебя.
-
OtherSide (14.08.13 09:43) [2]Некоторые куски кода.
Как вообще этот файл получился. В IdHTTPServer1CommandGet делаю:
if Assigned(ARequestInfo.PostStream) then
begin
FS := TFileStream.Create('c:\temp\123.bin', fmCreate);
ARequestInfo.PostStream.Position := 0;
FS.Write(ARequestInfo.PostStream, ARequestInfo.PostStream.Size);
FS.Free;
end;
Получается просто куча каких-то непонятных данных.
Пробую вот так:
procedure TDataModule1.IdHTTPServer1CreatePostStream(AContext: TIdContext; AHeaders: TIdHeaderList;
var VPostStream: TStream);
begin
VPostStream := TFileStream.Create('c:\temp\123.bin', fmCreate);
end;
procedure TDataModule1.IdHTTPServer1DoneWithPostStream(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; var VCanFree: boolean);
begin
VCanFree := True;
end;
Получается нормальный файл, правда закодированный в MIME. -
> OtherSide (14.08.13 09:43) [2]
> FS.Write(ARequestInfo.PostStream, ARequestInfo.PostStream.
> Size);
Это что такое? Копируешь непонятно что. CopyFrom надо. -
> Получается нормальный файл, правда закодированный в MIME.
В MIME кодирует клиент, собственно сервер тут ни при чем. Для раскодировки в Indy есть все необходимое - TIdMessageDecoderMIME, правда он несколько мудрено используется, но примеров в интернет масса. -
OtherSide (14.08.13 10:43) [5]DVM, спасибо огромное, действительно - неправильно данные из потока забирал.
>В MIME кодирует клиент, собственно сервер тут ни при чем
Я в курсе. Поищу, как декодировать.