如何用wininet函数实现http post方式的多文件上传,这个回调函数实现的是一个文件的上传,如何判断多个文件都上传完成了呢?
我现在只要都上传完成,返回一个值就行了
CString CFileUpload::UploadThread(CString url,CString filename,int num)
{
CString defServerName,defObjectName;
int nRet =0;
INTERNET_PORT nPort;
DWORD dwServiceType   =   0; nRet   =   AfxParseURL(   (LPCTSTR)url,   dwServiceType,   defServerName,   defObjectName,   nPort   ); if(   !nRet   ||   dwServiceType   !=   INTERNET_SERVICE_HTTP   )   
{     
AfxMessageBox(   "不能保存请求保存的网页的源代码。原因可能如下:\r\n\r\n1)请求不是一个HTTP请求。\r\n\r\n2)所请求的URL无法到达。"   );   
//return   FALSE; 
return "false";
}    CInternetSession Session("my session");
CHttpConnection *pHttpConnection = NULL;
CFile fTrack;
CHttpFile* pHTTP;
CString strHTTPBoundary;
CString strPreFileData;
CString strPostFileData;
DWORD dwTotalRequestLength;
DWORD dwChunkLength;
DWORD dwReadLength;
TCHAR szError[MAX_PATH];
void* pBuffer;
CString strResponse;
BOOL bSuccess = TRUE;
CString test;
CString strDebugMessage; if (FALSE == fTrack.Open(filename, CFile::modeRead | CFile::shareDenyWrite))
{
AfxMessageBox(_T("Unable to open the file."));
return "false ";
} int iRecordID = 1;
strHTTPBoundary = _T("IllBeVerySurprised");
strPreFileData = MakePreFileData(strHTTPBoundary, info.filename, iRecordID);
strPostFileData = MakePostFileData(strHTTPBoundary); dwTotalRequestLength = strPreFileData.GetLength() + strPostFileData.GetLength() + fTrack.GetLength(); dwChunkLength = 64 * 1024; pBuffer = malloc(dwChunkLength); if (NULL == pBuffer)
{
return "false";
} try
{
pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
pHTTP = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
pHTTP->AddRequestHeaders(MakeRequestHeaders(strHTTPBoundary));
pHTTP->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE); pHTTP->Write((LPSTR)(LPCSTR)strPreFileData, strPreFileData.GetLength()); dwReadLength = -1;
while (0 != dwReadLength)
{
strDebugMessage.Format(_T("%u / %u\n"), fTrack.GetPosition(), fTrack.GetLength());
TRACE(strDebugMessage);
dwReadLength = fTrack.Read(pBuffer, dwChunkLength);
if (0 != dwReadLength)
{
pHTTP->Write(pBuffer, dwReadLength);
}
} pHTTP->Write((LPSTR)(LPCSTR)strPostFileData, strPostFileData.GetLength()); pHTTP->EndRequest(HSR_SYNC); CString fileContent ="";
CString string =""; while(   pHTTP->ReadString(   string   )   )   
{   
fileContent   +=   "\r\n"   +   string;   

fileContent.TrimRight();   
printf(" %s\n " ,(LPCTSTR)fileContent);  pHTTP->Close();
pHttpConnection->Close();
delete pHTTP;
delete pHttpConnection; fTrack.Close();
Session.Close(); if (NULL != pBuffer)
{
free(pBuffer);
} return fileContent;
} catch (CException* e)
{
e->GetErrorMessage(szError, MAX_PATH);
e->Delete();
AfxMessageBox(szError);
bSuccess = FALSE;
} return "false";}