结构:Client(SocketConnection) + Server(RemoteDataModule ) + DataBase(sql server 2000)Midas三层中,如何从客户端上传文件至服务器端?

解决方案 »

  1.   

    在APP当中添加一个方法,比如使用varByte Array作为参数类型,然后传递过去。这个在好多年前的老贴子当中就有了,网上众多资料都会提到,一些书上也会讲到。其实就是一个FileStream/Stream与Variant相互转换。
      

  2.   

    procedure TFilePacket.ReadFile(const FileName: WideString;
                                   var Packet: OleVariant);
    var
      TempStream:TFileStream;
      Param:OleVariant;
      p:Pointer;
    begin
      TempStream:=TFileStream.Create(String(FileName),fmOpenRead);
      try
         Param:=VarArrayCreate([0,TempStream.Size-1],varByte);
         p:=VarArrayLock(Param);
         try
            TempStream.Position:=0;
            TempStream.Read(p^,TempStream.Size);
         finally
            VarArrayUnlock(Param);
         end;
      finally
         TempStream.Free;
      end;
      Packet:=Param;
    end;function TFilePacket.WriteFile(var Stream: OleVariant;
                                   const FileName: WideString): SYSINT;
    var
      OutStream:TFileStream;
      p:Pointer;
    begin
      Result:=-1;
      p:=VarArrayLock(Stream);
      OutStream:=TFileStream.Create(String(FileName),fmCreate);
      try
         OutStream.Write(p^,VarArrayHighBound(Stream,1)+1);
      finally
         VarArrayUnlock(Stream);
         OutStream.Free;
      end;
      Result:=0;
    end;