首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

【转】下传上载

2013-01-23 
【转】上传下载Download(const CString& strFileURLInServer, //待下载文件的URL const CString & strFileLo

【转】上传下载

Download(const CString& strFileURLInServer, //待下载文件的URL const CString & strFileLocalFullPath)//存放到本地的路径{ASSERT(strFileURLInServer != "");ASSERT(strFileLocalFullPath != "");CInternetSession session;CHttpConnection* pHttpConnection = NULL;CHttpFile* pHttpFile = NULL;CString strServer, strObject;INTERNET_PORT wPort;DWORD dwType;const int nTimeOut = 2000;session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //重试之间的等待延时session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);   //重试次数char* pszBuffer = NULL;  try{AfxParseURL(strFileURLInServer, dwType, strServer, strObject, wPort);pHttpConnection = session.GetHttpConnection(strServer, wPort);pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);if(pHttpFile->SendRequest() == FALSE)return false;DWORD dwStateCode;pHttpFile->QueryInfoStatusCode(dwStateCode);if(dwStateCode == HTTP_STATUS_OK){HANDLE hFile = CreateFile(strFileLocalFullPath, GENERIC_WRITE,FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);  //创建本地文 件if(hFile == INVALID_HANDLE_VALUE){pHttpFile->Close();pHttpConnection->Close();session.Close();return false;}char szInfoBuffer[1000];  //返回消息DWORD dwFileSize = 0;   //文件长度DWORD dwInfoBufferSize = sizeof(szInfoBuffer);BOOL bResult = FALSE;bResult = pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,(void*)szInfoBuffer,&dwInfoBufferSize,NULL);dwFileSize = atoi(szInfoBuffer);const int BUFFER_LENGTH = 1024 * 10;pszBuffer = new char[BUFFER_LENGTH];  //读取文件的缓冲DWORD dwWrite, dwTotalWrite;dwWrite = dwTotalWrite = 0;UINT nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH); //读取服务器上数据while(nRead > 0){WriteFile(hFile, pszBuffer, nRead, &dwWrite, NULL);  //写到本地文件dwTotalWrite += dwWrite;nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH);}delete[]pszBuffer;pszBuffer = NULL;CloseHandle(hFile);}else{delete[]pszBuffer;pszBuffer = NULL;if(pHttpFile != NULL){pHttpFile->Close();delete pHttpFile;pHttpFile = NULL;}if(pHttpConnection != NULL){pHttpConnection->Close();delete pHttpConnection;pHttpConnection = NULL;}session.Close();return false;}}catch(...){delete[]pszBuffer;pszBuffer = NULL;if(pHttpFile != NULL){pHttpFile->Close();delete pHttpFile;pHttpFile = NULL;}if(pHttpConnection != NULL){pHttpConnection->Close();delete pHttpConnection;pHttpConnection = NULL;}session.Close();return false;}if(pHttpFile != NULL)pHttpFile->Close();if(pHttpConnection != NULL)pHttpConnection->Close();session.Close();return true;}UploadFile(LPCTSTR strURL, //负责接收上传操作的页面的URL   LPCTSTR strLocalFileName)  //待上传的本地文件路径{ASSERT(strURL != NULL && strLocalFileName != NULL);BOOL bResult = FALSE;DWORD dwType = 0;CString strServer;CString strObject;INTERNET_PORT wPort = 0;DWORD dwFileLength = 0;char * pFileBuff = NULL;CHttpConnection * pHC = NULL;CHttpFile * pHF = NULL;CInternetSession cis;bResult =  AfxParseURL(strURL, dwType, strServer, strObject, wPort);if(!bResult)return FALSE;CFile file;try{if(!file.Open(strLocalFileName, CFile::shareDenyNone | CFile::modeRead))return FALSE;dwFileLength = file.GetLength();if(dwFileLength <= 0)return FALSE;pFileBuff = new char[dwFileLength];memset(pFileBuff, 0, sizeof(char) * dwFileLength);file.Read(pFileBuff, dwFileLength);const int nTimeOut = 5000;cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //联接超时设置cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);  //重试1次pHC = cis.GetHttpConnection(strServer, wPort);  //取得一个Http联接pHF = pHC->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);if(!pHF->SendRequest(NULL, 0, pFileBuff, dwFileLength)){delete[]pFileBuff;pFileBuff = NULL;pHF->Close();pHC->Close();cis.Close();return FALSE;}DWORD dwStateCode = 0;pHF->QueryInfoStatusCode(dwStateCode);if(dwStateCode == HTTP_STATUS_OK)bResult = TRUE;}catch(CInternetException * pEx){char sz[256] = "";pEx->GetErrorMessage(sz, 25);CString str;str.Format("InternetException occur!\r\n%s", sz);AfxMessageBox(str);}catch(CFileException& fe){CString str;str.Format("FileException occur!\r\n%d", fe.m_lOsError);AfxMessageBox(str);}catch(...){DWORD dwError = GetLastError();CString str;str.Format("Unknow Exception occur!\r\n%d", dwError);AfxMessageBox(str);}delete[]pFileBuff;pFileBuff = NULL;file.Close();pHF->Close();pHC->Close();cis.Close();return bResult;}

热点排行