zoukankan      html  css  js  c++  java
  • cross socket multipart

    cross socket multipart

    需要4个单元:

    Net.CrossHttpParams.pas

    Net.CrossHttpUtils.pas

    Utils.DateTime.pas

    Utils.Utils.pas

    procedure TCrossHttpServer.TriggerPostDataBegin(const AConnection
      : ICrossHttpConnection);
    var
      LRequest: TCrossHttpRequest;
      LMultiPart: THttpMultiPartFormData;
      LStream: TStream;
    begin
      LRequest := AConnection.Request as TCrossHttpRequest;
      case LRequest.BodyType of
        btMultiPart:
          begin
            LStream := TBytesStream.Create(nil);
            FreeAndNil(LRequest.FBody);
            LRequest.FBody := LStream; 
            // if (FStoragePath <> '') and not TDirectory.Exists(FStoragePath) then
            // TDirectory.CreateDirectory(FStoragePath);
            //
            // LMultiPart := THttpMultiPartFormData.Create;
            // LMultiPart.StoragePath := FStoragePath;
            // LMultiPart.AutoDeleteFiles := FAutoDeleteFiles;
            // LMultiPart.InitWithBoundary(LRequest.RequestBoundary);
            // FreeAndNil(LRequest.FBody);
            // LRequest.FBody := LMultiPart;
          end;
    
        btUrlEncoded:
          begin
            LStream := TBytesStream.Create;
            FreeAndNil(LRequest.FBody);
            LRequest.FBody := LStream;
          end;
    
        btBinary:
          begin
            LStream := TBytesStream.Create(nil);
            FreeAndNil(LRequest.FBody);
            LRequest.FBody := LStream;
          end;
      end;
    
      if Assigned(FOnPostDataBegin) then
        FOnPostDataBegin(Self, AConnection);
    end;
    
    procedure TCrossHttpServer.TriggerPostData(const AConnection
      : ICrossHttpConnection; const ABuf: Pointer; const ALen: Integer);
    var
      LRequest: TCrossHttpRequest;
    begin
      LRequest := AConnection.Request as TCrossHttpRequest;
    
      case LRequest.GetBodyType of
        btMultiPart:
          (LRequest.Body as TStream).Write(ABuf^, ALen); 
        // (LRequest.Body as THttpMultiPartFormData).Decode(ABuf, ALen);
        btUrlEncoded:
          (LRequest.Body as TStream).Write(ABuf^, ALen);
        btBinary:
          (LRequest.Body as TStream).Write(ABuf^, ALen);
    end;
    
    if Assigned(FOnPostData) then
      FOnPostData(Self, AConnection, ABuf, ALen);
    end;
    
    procedure TCrossHttpServer.TriggerPostDataEnd(const AConnection
      : ICrossHttpConnection);
    var
      LRequest: TCrossHttpRequest;
      LUrlEncodedStr: string;
      LUrlEncodedBody: THttpUrlParams;
    begin
      LRequest := AConnection.Request as TCrossHttpRequest;
    
      case LRequest.GetBodyType of
        btUrlEncoded:
          begin
            SetString(LUrlEncodedStr,
              MarshaledAString((LRequest.Body as TBytesStream).Memory),
              (LRequest.Body as TBytesStream).Size);
            LUrlEncodedBody := THttpUrlParams.Create;
            LUrlEncodedBody.Decode(LUrlEncodedStr);
            FreeAndNil(LRequest.FBody);
            LRequest.FBody := LUrlEncodedBody;
          end;
    
        btBinary, btMultiPart: 
          begin
            (LRequest.Body as TStream).Position := 0;
          end;
      end;
    
      if Assigned(FOnPostDataEnd) then
        FOnPostDataEnd(Self, AConnection);
    end;
    

      

  • 相关阅读:
    zoj 2972
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    使用和制作patch文件
    一步一步写算法(之洗牌算法)
    第3讲 数码管显示
    Oracle 11g client的安装和配置。
    StringTokenizer类的使用
    BDB (Berkeley DB)数据库简单介绍(转载)
    关于MSHTML
    C语言sizeofkeyword
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14295306.html
Copyright © 2011-2022 走看看