질문의 내용이 다소 헛갈리네요.
서버측에서 클라이언트에 저장.. 음..
서버측에서 푸시한다는 말씀인가요?
모 서버측에서 신호를 주면 클라이언트에서 파일을 가져오면 되니까서리
인디 콤포넌트에서도 기능이 있을 거 같은데
저는 기냥 아래 함수를 예전부터 써와서 익숙한지라 계속 쓰고 있습니다 참고하세요.
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. 서버측에서 클라이언트에 있는 특정 엑셀파일을 열리게 할 수 있나요?
:
: 미리 감사합니다.
|