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;
    

      

  • 相关阅读:
    JS DataURL 整理(一)
    JavaScript 与 ECMAScript 的关系
    HTML5 多媒体之<svg>标签 使用
    HTML5 多媒体之<canvas>标签 使用
    [转]信号量---进程间通信 ---php版
    [转]使用PHP的ftok()函数实现基于linux下系统级进程间消息通信demo(消息队列模式)
    【转】php ftok 使用
    [转]Golang调度模型
    【转】如何分析golang程序的内存使用情况---很有用
    【转】Go 中对栈中函数进行内联---这篇讲的不如上一篇,也还可以吧。。
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14295306.html
Copyright © 2011-2022 走看看