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;
    

      

  • 相关阅读:
    Spring 中的邮件任务
    Spring 定时任务
    java中同步交互 与 异步交互
    Springboot 版本包冲突
    Derby 配置环境变量
    Springboot中的Web服务Tomcat改为Jetty
    二叉树中和为某一值的路径
    0-Java中this和super的用法总结
    树9:二叉搜索树的后序遍历
    位运算-输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14295306.html
Copyright © 2011-2022 走看看