通过WinInet上传文件

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>

#include <Windows.h>
#include <WinINet.h>
#include <stdio.h>

#define BUFFSIZE 500


BOOL UseHttpSendReqEx(TCHAR *upFile)
{
	HINTERNET hSession=NULL, hConnect=NULL, hRequest=NULL;
	hSession = InternetOpen(_T("test"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);

	hConnect = InternetConnect(hSession,_T("192.168.2.192"), INTERNET_DEFAULT_HTTP_PORT, 
//hConnect = InternetConnect(hSession,_T("192.168.1.121"), INTERNET_DEFAULT_HTTP_PORT, 
		NULL,NULL,INTERNET_SERVICE_HTTP,INTERNET_FLAG_NO_CACHE_WRITE,NULL);

	INTERNET_BUFFERS BufferIn = {0};
	DWORD dwBytesRead;
	DWORD dwBytesWritten;
	BYTE pBuffer[1024]; // Read from file in 1K chunks
	BOOL bRead, bRet;

	BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );
	
	//hRequest = HttpOpenRequest (hConnect, "POST","/chess/webx/server/ool/header.php?&gameId=106&session=e5020849", NULL, NULL, NULL,  0, 0);
	hRequest = HttpOpenRequest (hConnect, "POST","/texascilent_mb/tool/header.php?&gameId=106&session=e5020849", NULL, NULL, NULL,  0, 0);
	if (!hRequest)
	{
		printf("Failed to open request handle: %lu\n", GetLastError ());
		return FALSE;
	}

	HANDLE hFile = CreateFile (upFile, GENERIC_READ, FILE_SHARE_READ,
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("\nFailed to open local file %s.", upFile);
		return FALSE;
	}

	BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);
	printf ("File size is %d\n", BufferIn.dwBufferTotal );

	if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
	{
		printf( "Error on HttpSendRequestEx %lu\n",GetLastError() );
		return FALSE;
	}

	DWORD sum = 0;
	do
	{
		if  (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer),
			&dwBytesRead, NULL)))
		{
			printf ("\nReadFile failed on buffer %lu.",GetLastError());
			break;
		}
		if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,
			&dwBytesWritten)))
		{
			printf ("\nInternetWriteFile failed %lu", GetLastError());
			break;
		}
		sum += dwBytesWritten;
	}
	while (dwBytesRead == sizeof(pBuffer)) ;

	CloseHandle (hFile);
	printf ("Actual written bytes: %d\n", sum);

	if(!HttpEndRequest(hRequest, NULL, 0, 0))
	{
		printf( "Error on HttpEndRequest %lu \n", GetLastError());
		return FALSE;
	}
	Sleep(100000);
	return TRUE;
}



void main( int argc, char **argv )
{
	UseHttpSendReqEx("C:\\Users\\Administrator\\Desktop\\test\\tt.jpg");
}

你可能感兴趣的:(WinINet)