::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 22:12:21, Hit : 6380, Vote : 1597
 HTTP로 파일 다운받기2 (WinInet 이용)

unit uInetUtils;

interface

const
  InternetRefferer: String = 'App Server';

procedure SendMemoryBufferToIIS(const Server: String; const URL:
String;
  Buffer: Pointer; Size: Cardinal);

procedure SendFileToIIS(const Server: String; const URL: String; const
upFile: String);

procedure ReadFileFromIIS(const Server: String; const URL: String;
const FileName: String);

procedure DeleteFileOnIIS(const Server: String; const URL: String);

implementation

uses WinInet, Windows, SysUtils;

procedure SendMemoryBufferToIIS(const Server: String; const URL:
String;
  Buffer: Pointer; Size: Cardinal);
var
  dwBytesWritten: DWORD ;
  BufferIn: INTERNET_BUFFERS; //  = {0};
  hRequest: HINTERNET;
  hInet, hConnect: HINTERNET;
begin
  hInet := InternetOpen(PChar(InternetRefferer),
INTERNET_OPEN_TYPE_DIRECT,  NIL, NIL, 0);
  if (hInet = NIL) then
     RaiseLastWin32Error;
  try
    hConnect := InternetConnect(hInet, PChar(Server),
INTERNET_DEFAULT_HTTP_PORT,
      NIL, NIL, INTERNET_SERVICE_HTTP, 0, 0);
    if (hConnect = NIL) then
       RaiseLastWin32Error;
    try
      FillChar(BufferIn, SizeOf(BufferIn), 0);
      BufferIn.dwStructSize := SizeOf(INTERNET_BUFFERS);
      hRequest := HttpOpenRequest(hConnect, 'PUT', PChar(URL), NIL,
NIL, NIL,
        INTERNET_FLAG_NO_CACHE_WRITE, 0);
      if (hRequest = NIL) then
         RaiseLastWin32Error;
      BufferIn.dwBufferTotal := Size;
      try
        Win32Check(HttpSendRequestEx(hRequest, @BufferIn, NIL,
HSR_INITIATE, 0));
        Win32Check(InternetWriteFile(hRequest, Buffer, Size,
dwBytesWritten));
      finally
        HttpEndRequest(hRequest, NIL, 0, 0);
      end;
    finally
      InternetCloseHandle(hConnect);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;


procedure SendFileToIIS(const Server: String; const URL: String; const
upFile: String);
var
  dwBytesRead: DWORD;
  dwBytesWritten: DWORD ;
  pBuffer: array[0..4095] of Byte;
  BufferIn: INTERNET_BUFFERS; //  = {0};
  hRequest: HINTERNET;
  hFile: THandle;
  hInet, hConnect: HINTERNET;
begin
  hInet := InternetOpen(PChar(InternetRefferer),
INTERNET_OPEN_TYPE_DIRECT,  NIL, NIL, 0);
  if (hInet = NIL) then
     RaiseLastWin32Error;
  try
    hConnect := InternetConnect(hInet, PChar(Server),
INTERNET_DEFAULT_HTTP_PORT,
      NIL, NIL, INTERNET_SERVICE_HTTP, 0, 0);
    if (hConnect = NIL) then
       RaiseLastWin32Error;
    try
      FillChar(BufferIn, SizeOf(BufferIn), 0);
      BufferIn.dwStructSize := SizeOf(INTERNET_BUFFERS);
      hRequest := HttpOpenRequest(hConnect, 'PUT', PChar(URL), NIL,
NIL, NIL,
        INTERNET_FLAG_NO_CACHE_WRITE, 0);
      if (hRequest = NIL) then
         RaiseLastWin32Error;
      try
        hFile := CreateFile(PChar(upFile), GENERIC_READ,
FILE_SHARE_READ,
              NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if (hFile = INVALID_HANDLE_VALUE) then
           RaiseLastWin32Error;
        try
          BufferIn.dwBufferTotal := GetFileSize(hFile, NIL);
          Win32Check(HttpSendRequestEx(hRequest, @BufferIn, NIL,
HSR_INITIATE, 0));
          repeat
            Win32Check(ReadFile(hFile, pBuffer, sizeof(pBuffer),
dwBytesRead, NIL));
            Win32Check(InternetWriteFile(hRequest, @pBuffer,
dwBytesRead, dwBytesWritten));
          until dwBytesRead <> SizeOf(pBuffer);
        finally
          CloseHandle(hFile);
        end;
      finally
        HttpEndRequest(hRequest, NIL, 0, 0);
      end;
    finally
      InternetCloseHandle(hConnect);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

procedure ReadFileFromIIS(const Server: String; const URL: String;
const FileName: String);
var
  dwBytesRead: DWORD;
  dwBytesWritten: DWORD ;
  pBuffer: array[0..4095] of Byte;
  hFile: THandle;
  hInet, hConnect: HINTERNET;
begin
  hInet := InternetOpen(PChar(InternetRefferer),
INTERNET_OPEN_TYPE_DIRECT,  NIL, NIL, 0);
  if (hInet = NIL) then
     RaiseLastWin32Error;
  try
    hConnect := InternetOpenUrl(hInet, PChar('http://' + Server +
URL), NIL, 0,
       INTERNET_FLAG_RAW_DATA, 0);
    if (hConnect = NIL) then
       RaiseLastWin32Error;
    try
      hFile := CreateFile(PChar(FileName), GENERIC_WRITE,
FILE_SHARE_WRITE,
          NIL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
      if (hFile = INVALID_HANDLE_VALUE) then
         RaiseLastWin32Error;
      try
        repeat
          Win32Check(InternetReadFile(hConnect, @pBuffer,
SizeOf(pBuffer), dwBytesRead));
          Win32Check(WriteFile(hFile, pBuffer, dwBytesRead,
dwBytesWritten, NIL));
        until dwBytesRead <> SizeOf(pBuffer);
      finally
        CloseHandle(hFile);
      end;
    finally
      InternetCloseHandle(hConnect);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

procedure DeleteFileOnIIS(const Server: String; const URL: String);
var
  hRequest: HINTERNET;
  hInet, hConnect: HINTERNET;
  lpdwError: DWORD;
  Buffer: array[0..1024] of Char;
  BufLen: DWORD;
begin
  hInet := InternetOpen(PChar(InternetRefferer),
INTERNET_OPEN_TYPE_DIRECT,  NIL, NIL, 0);
  if (hInet = NIL) then
     RaiseLastWin32Error;
  try
    hConnect := InternetConnect(hInet, PChar(Server),
INTERNET_DEFAULT_HTTP_PORT,
      NIL, NIL, INTERNET_SERVICE_HTTP, 0, 0);
    if (hConnect = NIL) then
       RaiseLastWin32Error;
    try
      hRequest := HttpOpenRequest(hConnect, 'DELETE', PChar(URL), NIL,
NIL, NIL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
      if (hRequest = NIL) then
         RaiseLastWin32Error;
      Win32Check(HttpSendRequest(hRequest, NIL, 0, NIL, 0));
      BufLen := SizeOf(Buffer);
      Win32Check(InternetGetLastResponseInfo(lpdwError, Buffer,
BufLen));
      HttpEndRequest(hRequest, NIL, 0, 0);
    finally
      InternetCloseHandle(hConnect);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

end.





691   [일반/컴포넌트] 델파이 에디트에서 '}', ']', ')' 의 시작점을 찾아주는 단축키  구창민 2003/03/14 4109 1011
690   [일반/컴포넌트] 레지스트리를 사용하는 사용자 함수 만들어 보기  구창민 2003/03/14 4590 1034
689   [데이터베이스] DB에서 자음(ㄱ,ㄴ,ㄷ....)으로 SELECT 하기  김영대 2003/03/12 5011 1170
688   [일반/컴포넌트] TreeView 노드조회  신훈재 2003/03/11 5561 1057
687   [일반/컴포넌트] 델파이안에 익스플로러 삽입  신훈재 2003/03/10 5728 1024
686   [윈도우즈 API] 화면 캡쳐하여 JPEG로 저장  신훈재 2003/03/10 5018 1005
685   [윈도우즈 API] 휴지통에 파일을 버리는 법  신훈재 2003/03/10 4383 1136
684   [윈도우즈 API] treeview 에 있는 내용을 출력하기  신훈재 2003/03/10 4391 1031
683   [윈도우즈 API] TreeView에 Data 사용법  신훈재 2003/03/10 4512 1043
682   [시스템] 시스템 고유의 ID 를 생성하려면...  김영대 2003/03/07 6309 1395
681   [일반/컴포넌트] TEdit의 Text를 left, center, right 정렬하기  김영대 2003/03/07 4483 1059
680   [윈도우즈 API] 마우스 위치의 콘트롤(콤포넌트)을 조사하기  김영대 2003/03/07 4227 1060
679   [네트웍/인터넷] Sending Raw IP Packets  김영대 2003/03/07 6151 1198
678   [네트웍/인터넷] 모든 TCP/IP interfaces 의 IP/Netmask 구하기  김영대 2003/03/07 5310 1175
677   [일반/컴포넌트] Outlook Express 설치여부 알아내기  김영대 2003/03/07 4740 1073
676   [네트웍/인터넷] HTTP 프로토콜을 이용하여 파일 다운받기  김영대 2003/03/07 6043 1581
675   [시스템] Windows 9x/ME/NT/2000/XP 버전 구별  김영대 2003/03/07 4465 1198
674   [시스템] mutex를 이용한 중복 실행 방지  김영대 2003/03/07 5794 1278
673   [네트웍/인터넷] HTTP로 파일 다운받기 (WinInet 이용)  김영대 2003/03/07 6001 1545
672   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 4621 1120
671   [시스템] 윈도우즈 공유폴더 리스트 얻기  김영대 2003/03/07 5105 1253
  [네트웍/인터넷] HTTP로 파일 다운받기2 (WinInet 이용)  김영대 2003/03/07 6380 1597
669   [윈도우즈 API] IE 의 즐겨찾기 읽기  김영대 2003/03/07 5471 1430
668   [일반/컴포넌트] Convert UNIX, TDateTime  김영대 2003/03/07 6004 1535
667   [윈도우즈 API] Task bar 에 나타나지 않는 프로그램 만들기  김영대 2003/03/07 5632 1435
666   [데이터베이스] how to get records from Oracle StoredProcedure  김영대 2003/03/07 4270 1102
665   [일반/컴포넌트] 메인메뉴가 팝업될때 이벤트를 탈수있는방법  김영대 2003/03/07 6349 1658
664   [일반/컴포넌트] System Menu 의 닫기 메뉴 disable 시키기  김영대 2003/03/07 3554 955
663   [일반/컴포넌트] StringGrid - multiline text  김영대 2003/03/07 5747 1345
662   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 5410 1343
661   [일반/컴포넌트] RichEdit 에 tab 설정하기  김영대 2003/03/07 4002 1095
660   [시스템] Hooking methods (Application.OnMessage)  김영대 2003/03/07 6614 1467
659   [시스템] WndProc for TComonent  김영대 2003/03/07 4713 1295
658   [일반/컴포넌트] IE(Internet Explorer) toolbar 에 버튼 올리기  김영대 2003/03/07 4085 1045
657   [시스템] IP address 바꾸기  김영대 2003/03/07 5325 1332
656   [시스템] CPU 이름 구하기  김영대 2003/03/07 5098 1305
655   [시스템] process 가 사용한 메모리 구하기  김영대 2003/03/07 4541 1192
654   [시스템] ROM-BIOS 정보 읽기  김영대 2003/03/07 5101 1199
653   [시스템] Shutdown/Reboot/Logoff Windows 9x/NT/Me/2000 ?  김영대 2003/03/07 4885 1306
652   [일반/컴포넌트] 커서(캐럿)가 line 위에 있는지 검사하기  김영대 2003/03/07 3957 1035

[1][2][3][4][5][6][7] 8 [9][10]..[25] [다음 10개]
 

Copyright 1999-2019 Zeroboard / skin by zero