Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10149] Re:[질문] 서버에서 클라이언트 파일을 열리게 할수 있나요?
류종택 [ryujt] 1172 읽음    2005-07-14 10:25
질문의 내용이 다소 헛갈리네요.

서버측에서 클라이언트에 저장..  음..
서버측에서 푸시한다는 말씀인가요?
모 서버측에서 신호를 주면 클라이언트에서 파일을 가져오면 되니까서리
인디 콤포넌트에서도 기능이 있을 거 같은데
저는 기냥 아래 함수를 예전부터 써와서 익숙한지라 계속 쓰고 있습니다 참고하세요.

Function  GetHttpFile(StrUrl:String; Stream:TStream):Boolean;
var
  ISession, HttpFile: HINTERNET;
  UrlBuff: String;
  ByteRead, BuffSize, FileSize, Reserved: DWord;
  bSizeIsKnown: boolean;
  ms: TMemoryStream;
  FileSizeBuff: Pointer;
  Buffer: Pointer;
begin
  Stream.Position := 0;
  Result := false;

  ISession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  HttpFile := InternetOpenUrl(ISession, PChar(StrUrl), nil, 0, INTERNET_FLAG_DONT_CACHE, 0);
  SetLength(UrlBuff, 1024);
  BuffSize := 1024;
  Reserved := 0;
  if HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LOCATION, PChar(UrlBuff), BuffSize, Reserved) = false then
  begin
    case(GetLastError()) of
      ERROR_INSUFFICIENT_BUFFER:
      begin
        SetLength(UrlBuff, BuffSize+1);
        HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LOCATION, PChar(UrlBuff), BuffSize, Reserved);
      end;
      ERROR_HTTP_HEADER_NOT_FOUND:
        UrlBuff := StrUrl;
      else
        InternetCloseHandle(HttpFile);
        exit;
    end;
  end;
  GetMem(FileSizeBuff, 4);
  BuffSize := sizeof(FileSizeBuff);
  Reserved := 0;
  bSizeIsKnown := HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LENGTH, FileSizeBuff, BuffSize, Reserved);
  if bSizeIsKnown then
  begin
    FileSize := StrToInt(PChar(FileSizeBuff));
    if Stream is TMemoryStream then
      ms := Stream as TMemoryStream
    else
      ms := TMemoryStream.Create;
    ms.Size := FileSize;
    Result := InternetReadFile(HttpFile, ms.Memory, FileSize, ByteRead);
    if Result then Stream.CopyFrom(ms, 0);
    if ms <> Stream then ms.Free;
  end
  else
  begin
    GetMem(Buffer, 2048);
    FileSize := 2048;
    while true do
    begin
      Result := InternetReadFile(HttpFile, Buffer, FileSize, ByteRead);
      if ByteRead = 0 then break;
      Stream.Write(Buffer^, ByteRead);
    end;
    FreeMem(Buffer);
  end;
  FreeMem(FileSizeBuff);
  InternetCloseHandle(HttpFile);
  InternetCloseHandle(ISession);
end;



2번 질문도 의도가 이해가 안가서 답변을 못드리겠네요..


제갈식 님이 쓰신 글 :
: [질문] 서버에서 클라이언트 파일을 열리게 할수 있나요?
:
:
: 서버는 Linux + Apache + PHP 이고 클라이언트는 윈도우즈 입니다.
:
: 1. 서버측에서 서버에 있는 엑셀파일을 클라이언트의 특정 폴더에 저장되도록 하는게 가능한가요?
:
: 2. 서버측에서 클라이언트에 있는 특정 엑셀파일을 열리게 할 수 있나요?
:
: 미리 감사합니다.

+ -

관련 글 리스트
10148 [질문] 서버에서 클라이언트 파일을 열리게 할수 있나요? 제갈식 878 2005/07/12
10149     Re:[질문] 서버에서 클라이언트 파일을 열리게 할수 있나요? 류종택 1172 2005/07/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.