Конференция "Сети" » ARequestInfo.PostStream
 
  • OtherSide (13.08.13 00:24) [0]
    Добрый всем день. Надеюсь, что я еще не надоел :) Пытаюсь сделать upload файлов с помощью TIdHTTPServer. Пробую забрать поток из ARequestInfo.PostStream. Побродил по интернету, увидел, что он, возможно, будет закодирован в MIME. Увидел в ARequestInfo.PostStream кучу байт, никак не связанных ни с MIME ни с пересылаемым файлом (пробую переслать простой тектовый файл хотя бы). Пересылаемый файл занимает 17 байт, содержит надпись 'this is test file', присылаемые данные - куча каких-то непонятных байтов:

    http://zalil.ru/34674531
  • DVM © (13.08.13 16:35) [1]
    Ошибка в 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.
  • DVM © (14.08.13 10:21) [3]

    > OtherSide   (14.08.13 09:43) [2]


    >  FS.Write(ARequestInfo.PostStream, ARequestInfo.PostStream.
    > Size);

    Это что такое? Копируешь непонятно что. CopyFrom надо.
  • DVM © (14.08.13 10:24) [4]

    > Получается нормальный файл, правда закодированный в MIME.

    В MIME кодирует клиент, собственно сервер тут ни при чем. Для раскодировки в Indy есть все необходимое - TIdMessageDecoderMIME, правда он несколько мудрено используется, но примеров в интернет масса.
  • OtherSide (14.08.13 10:43) [5]
    DVM, спасибо огромное, действительно - неправильно данные из потока забирал.

    >В MIME кодирует клиент, собственно сервер тут ни при чем

    Я в курсе. Поищу, как декодировать.
 
Конференция "Сети" » ARequestInfo.PostStream
Есть новые Нет новых   [118451   +42][b:0][p:0.001]