//-------------------------------------------------------------------------------------//
// Function : GetFile
// Parameter: LPCTSTR url, LPCTSTR filename
// Return : CString
// - 성공하면 "YES" 실패하면 에러메시지를 반환
// Note : url의 파일을 받아서 filename에 저장한다.
// LPCTSTR url - http프로토콜을 이용해 받아올 파일의 전체경로
// LPCTSTR filename - 파일을 저장할 local경로
//-------------------------------------------------------------------------------------//
CString CInternetImageCtrl::GetFile(LPCTSTR url, LPCTSTR filename)
{
HINTERNET hInternet, hURL;
// 연결
hInternet = InternetOpen( L"HTTPFILE", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if ( hInternet == NULL )
return L"인터넷이 연결되어 있지 않습니다.";
// url
hURL = InternetOpenUrl( hInternet, url, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if ( hURL==NULL )
{
InternetCloseHandle( hInternet );
return L"서버오류로 연결할 수 없습니다.";
}
// 연결정보 확인
TCHAR szStatusCode[10000];
DWORD dwInfoSize = 10000;
HttpQueryInfo(hURL, HTTP_QUERY_STATUS_CODE, szStatusCode, &dwInfoSize, NULL);
long nStatusCode = _ttol(szStatusCode);
if (nStatusCode == HTTP_STATUS_OK)
{ // 정상
// local file 생성
HANDLE hFile;
hFile = CreateFile( filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
DWORD size;
DWORD dwRead, dwWritten; //, Recv=0;
char* buf = NULL;
do
{
InternetQueryDataAvailable( hURL, &size, 0, 0 );
buf = new char[size];
InternetReadFile( hURL, buf, size, &dwRead );
WriteFile( hFile, buf, dwRead, &dwWritten, NULL );
delete buf;
} while ( dwRead != 0 );
CloseHandle( hFile );
}
else if (nStatusCode == HTTP_STATUS_NOT_FOUND)
{ // 404에러
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
return L"그림이 준비되지 않았습니다";
} else
{ // 그외의 에러..
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
CString str;
str.Format( L"Unknown ErrornErr code : %d", nStatusCode);
return str;
}
InternetCloseHandle( hInternet );
InternetCloseHandle( hURL );
return L"YES";
}
|
댓글
댓글 쓰기