큰 파일 업로드/다운로드

12840 단어 demo
오랜만에 기술문 썼어. 데이터스냅 대류.온전한 코드와 함께 엽형이 전해준 조언에 감사드립니다.(10일만 공개)
첨부: 아래 코드, 전재는 출처를 밝혀 주십시오
::code
서비스 포트:
 
function TServerMethods1.DownLoadFile(AfileName: string): TStream;

const

SaveFolder = 'FSimage\';

defaultName = 'Default.png'; //       

//            

var

ALLpath: string;

begin

ALLpath := LocalPath + SaveFolder + AfileName;

if not FileExists(ALLpath) then

    ALLpath := LocalPath + SaveFolder + defaultName;

Result := TFileStream.Create(ALLpath, fmOpenRead);

Result.Position := 0;

//                        

end;

 

function TServerMethods1.PutFile(AfileName: string; Stream: TStream): Boolean;

const

BufSize = $F000;

SaveFolder = 'FSimage\';

var

Buffer: TBytes;

ReadCount: Integer;

FS: TFileStream;

begin

if not DirectoryExists(LocalPath + SaveFolder) then

    CreateDir(LocalPath + SaveFolder);

FS := TFileStream.Create(LocalPath + SaveFolder + AfileName, FmCreate);

try

    if Stream.Size = -1 then //                 

    begin

      SetLength(Buffer, BufSize);

      repeat

        ReadCount := Stream.Read(Buffer[0], BufSize);

        if ReadCount > 0 then

          FS.WriteBuffer(Buffer[0], ReadCount);

        if ReadCount < BufSize then

          break;

      until ReadCount < BufSize;

    end

    else //            

      FS.CopyFrom(Stream, 0);

    Result := True;

finally

    FS.Free;

end;

end;

 
클라이언트:
 
procedure TForm1.Button1Click(Sender: TObject);

var

cs: TServerMethods1Client;

memoryStream: TMemoryStream;

begin

cs := TServerMethods1Client.Create(self.SQLConnection1.DBXConnection);

try

    memoryStream := TMemoryStream.Create;

    try

      // Image1.Picture.Graphic.SaveToStream(memoryStream);

      SaveAs(Image1.Picture.Graphic, memoryStream, gptPNG);

      memoryStream.Position := 0;

      // memoryStream.Seek(0, TSeekOrigin.soBeginning);

      if cs.PutFile('1.png', memoryStream) then

        ShowMessage('    ')

      else

        ShowMessage('    ');

    finally

      if memoryStream <> nil then

        memoryStream := nil;

    end;

finally

    cs.free;

end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

DownLoadfs(Image1.Picture,'1.png')

end;

 

procedure TForm1.DownLoadfs(Ggs:TPicture;fsName: string);

const

BufSize = $F000;

var

Stream, FS: TStream;

cs: TServerMethods1Client;

syn: TSynPicture;

Buffer: TBytes;

ReadCount: Integer;

begin

cs := TServerMethods1Client.Create(self.SQLConnection1.DBXConnection);

try

    Stream := cs.DownLoadFile(fsName);

    FS := TMemoryStream.Create;

    try

      if Stream.Size = -1 then //                 

      begin

        SetLength(Buffer, BufSize);

        repeat

          ReadCount := Stream.Read(Buffer[0], BufSize);

          if ReadCount > 0 then

            FS.WriteBuffer(Buffer[0], ReadCount);

          if ReadCount < BufSize then

            break;

        until ReadCount < BufSize;

      end

      else //            

        FS.CopyFrom(Stream, 0);

      syn := TSynPicture.Create;

      try

        syn.LoadFromStream(FS);

        Ggs.Assign(syn);

      finally

        syn.free;

      end;

    finally

      FS.free;

    end;

finally

    cs.free;

end;

 

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

self.SQLConnection1.Connected := True;

gdip := TGDIPlusFull.Create('gdiplus.dll');

end;

 

procedure TForm1.Image1DblClick(Sender: TObject);

var

syn: TSynPicture;

begin

if self.OpenDialog1.Execute then

begin

    if self.OpenDialog1.FileName = '' then

      Exit

    else

    begin

      syn := TSynPicture.Create;

      try

        syn.LoadFromFile(self.OpenDialog1.FileName);

        self.Image1.Picture.Assign(syn);

      finally

        syn.free;

      end;

    end;

end;

end;

 
 
 

좋은 웹페이지 즐겨찾기