Witam, przedstawiam poniżej kod, wysyłający plik na serwer przez http:
BOOL UseHttpSendReqEx(HINTERNET hConnect, TCHAR *upFile)
{
static Wininet::INTERNET_BUFFERS BufferIn = {0};
DWORD dwBytesRead;
DWORD dwBytesWritten;
BYTE pBuffer[1024];
BOOL bRead, bRet;
BufferIn.dwStructSize = sizeof( Wininet::INTERNET_BUFFERS );
BufferIn.lpcszHeader = _T(" -----------------------------7d23542a1a12c2 Content-Disposition: form-data; name=\"filename\"; filename=\"C:\\155.fet\" Content-Type: multipart/form-data -----------------------------7d21fa22012ca--");
BufferIn.dwHeadersLength = strlen(BufferIn.lpcszHeader);
BufferIn.Next=NULL;
HINTERNET hRequest = HttpOpenRequest (hConnect, "PUT",
"/syst.php", NULL, NULL, NULL, 0, 0);
if (!hRequest)
{
ShowMessage("\nFailed to open reqeust.");
return false;
}
HANDLE hFile = CreateFile (upFile, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
ShowMessage("\nFailed to open local file %s.");
return false;
}
FILE * f = fopen( upFile, "r" );
fseek( f,0, SEEK_END );
long size = ftell( f );
fclose( f );
BufferIn.dwBufferTotal = size;
if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
{
ShowMessage(GetLastError());
return false;
}
DWORD sum = 0;
do
{
if (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer),
&dwBytesRead, NULL)))
{
ShowMessage("\nReadFile failed on buffer %lu.");
break;
}
if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,
&dwBytesWritten)))
{
ShowMessage("\nInternetWriteFile failed %lu");
break;
}
sum += dwBytesWritten;
}
while (dwBytesRead == sizeof(pBuffer)) ;
CloseHandle (hFile);
ShowMessage("Actual written bytes: %d\n"+IntToStr(sum));
if(!HttpEndRequest(hRequest, NULL, 0, 0))
{
printf( "Error on HttpEndRequest %lu \n");
return false;
}
return true;
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
HINTERNET pServer,pSession;
pSession=InternetOpen("seantest",INTERNET_OPEN_TYPE_PRECONFIG ,"","",INTERNET_FLAG_ASYNC);
pServer = InternetConnect(pSession, "www.afkota.pl", 80, NULL, NULL, INTERNET_SERVICE_HTTP, INTERNET_FLAG_NO_CACHE_WRITE, 0);
bool co=UseHttpSendReqEx(pServer,"C:\\155.fet");
}
Wyskakuje mi błąd (Error 997 czyli ERROR_IO_PENDING) przy HttpSendRequestEx, na internecie nic zabardzo nie znalazłem jak zaradzić temu problemowi, dlatego zwracam się do was z wielką prośbą o pomoc. Troche mieszałem, więc ten kod może być troche absurdlany. Z góry wielkie dzięki za pomoc.