利用HTTP方式上传

#include

#include

#include

#include BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile); BOOL Upload(CString bstrLocalFile,CString bstrServerIP,CString strServerPort,CString bstrRemoteFile);

#define BUFFSIZE 500

void main( int argc, char **argv ) {

if (argc < 5)
{
    printf("Usage: Bigpost  \n");
    printf(" is the local file to POST\n");
    printf(" is the server's IP to POST to\n");
    printf(" is the server's Port to POST to\n");
    printf(" is the virtual path to POST to\n");
    exit(0);
}
Upload(argv[1],argv[2],argv[3],argv[4]);

} BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile) { DWORD dwRead; BYTE buffer; printf(“Local file:%s\n”,strLocalFile); FILE fLocal; if((fLocal=fopen(strLocalFile,”rb”))==NULL){ printf(“Can’t open the file:%s,maybe it doesn’t exist!\n”,strLocalFile); return false; } fseek(fLocal,0L,SEEK_END); dwRead=ftell(fLocal); rewind(fLocal); buffer=(BYTE *)malloc(dwRead); if(!buffer){ printf(“not enough memory!\n”); return false; } printf(“length of file:%d\n”,dwRead); dwRead=fread(buffer,1,dwRead,fLocal); dwPostSize=dwRead;

INTERNET_BUFFERS BufferIn;
DWORD dwBytesWritten;
BOOL bRet;
BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur
BufferIn.Next = NULL;
BufferIn.lpcszHeader = NULL;
BufferIn.dwHeadersLength = 0;
BufferIn.dwHeadersTotal = 0;
BufferIn.lpvBuffer = NULL;
BufferIn.dwBufferLength = 0;
BufferIn.dwBufferTotal = dwPostSize; // This is the only member used other than dwStructSize
BufferIn.dwOffsetLow = 0;
BufferIn.dwOffsetHigh = 0;

if(!HttpSendRequestEx( hRequest, &BufferIn;, NULL, 0, 0))
{
    printf( "Error on HttpSendRequestEx %d\n",GetLastError() );
    return FALSE;
}
bRet=TRUE;
    if(bRet=InternetWriteFile( hRequest, buffer, dwPostSize, &dwBytesWritten;))
        printf( "\r%d bytes sent.", dwPostSize);
if(!bRet)
{
    printf( "\nError on InternetWriteFile %lu\n",GetLastError() );
    return FALSE;
}

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

}

BOOL Upload(CString strLocalFile,CString strServerIP,CString strServerPort,CString strRemoteFile){ DWORD dwPostSize=0; int intServerPort=atoi(strServerPort); HINTERNET hSession = InternetOpen( “HttpSendRequestEx”, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(!hSession) { printf(“Failed to open session\n”); return FALSE; } HINTERNET hConnect = InternetConnect(hSession, strServerIP, intServerPort, NULL, NULL, INTERNET_SERVICE_HTTP,NULL, NULL); if (!hConnect){ printf( “Failed to connect\n” ); return FALSE; }else{ HINTERNET hRequest = HttpOpenRequest(hConnect, “PUT”, strRemoteFile, NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0); if (!hRequest){ printf( “Failed to open request handle\n” ); }else{ if(UseHttpSendReqEx(hRequest, dwPostSize,strLocalFile)) { char pcBuffer[BUFFSIZE]; DWORD dwBytesRead;

            printf("\nThe following was returned by the server:\n");
            do
            {    dwBytesRead=0;
                if(InternetReadFile(hRequest, pcBuffer, BUFFSIZE-1, &dwBytesRead;))
                {
                    pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer
                    printf("%s", pcBuffer);
                }
                else
                    printf("\nInternetReadFile failed");
            }while(dwBytesRead>0);
            printf("\n");
        }
        if (!InternetCloseHandle(hRequest))
            printf( "Failed to close Request handle\n" );
    }
    if(!InternetCloseHandle(hConnect))
        printf("Failed to close Connect handle\n");
}
if( InternetCloseHandle( hSession ) == FALSE ){
    printf( "Failed to close Session handle\n" );
    return FALSE;
}
printf( "\nFinished.\n" );
return TRUE;

}

支持原创技术分享,据说打赏我的人,都找到了女朋友!