Upload файла на IIS сервер средствами библиотеки WinInet
От: c00ller  
Дата: 09.06.09 14:39
Оценка:
Требуется загрузить файл на IIS сервер средствами библиотеки WinInet (MFC использовать нельзя). В инетрнете я нашел некоторые исходники и на их основе написал свою прогу. Вроде все написано как и в тех немногих примерах которые я нашел, в ходе выполнения кода ошибок не возникает — а файл все равно не Upload-ится.
В логе IIS пишеться следующее:

2009-06-02 13:44:02 127.0.0.1 PUT /MyWebSite/Upload/Test.txt — 80 — 127.0.0.1 MyFileUpload 404 0 2

Т.е. получаются ошибки:

404 — "HTTP Error 404 — File or directory not found" и
2 — "The system cannot find the file specified", хотя вроде все пути к файлам указаны верно.


Подскажите плз — что я не так делаю...


Вот пример кода моей функции, которая отвечает за UPLOAD:
BOOL UploadFileToServer(CString fileName)
{
HINTERNET hInternet = InternetOpen(
TEXT("MyFileUpload"),
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);

if (hInternet != NULL)
{
HINTERNET hConnect = InternetConnect(
hInternet,
TEXT("127.0.0.1"), 
80,
NULL,NULL,
INTERNET_SERVICE_HTTP,
0,
1u); 

if ( hConnect )
{
DWORD dwOpenRequestFlags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_CACHE_WRITE;

HINTERNET hRequest = HttpOpenRequest(
hConnect,
TEXT("PUT"),
_T("MyWebSite/Upload/Test.txt"),
NULL,
NULL,
0,
dwOpenRequestFlags,
0);

if ( hRequest )
{ 
HANDLE hFile = CreateFile(
fileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if ( hFile == INVALID_HANDLE_VALUE )
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);

return FALSE;
}

INTERNET_BUFFERS BufferIn = {0};
BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );
BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);

if( !HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0) ) 
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
CloseHandle(hFile);

return FALSE;
}

DWORD sum = 0;
BOOL bRead = TRUE, bRet = TRUE;
BYTE pBuffer[1024];
DWORD dwBytesRead;
DWORD dwBytesWritten;

do
{
if ( !(bRead = ReadFile(hFile, pBuffer, sizeof(pBuffer),&dwBytesRead, NULL)) )
break;

if ( !(bRet = InternetWriteFile(hRequest, pBuffer, dwBytesRead, &dwBytesWritten)) )
break;

sum += dwBytesWritten;
}
while (dwBytesRead == sizeof(pBuffer));

if( !HttpEndRequest(hRequest, NULL, 0, 0) )
{
CloseHandle(hFile);
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);

return FALSE;
}

CloseHandle(hFile);
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
}
else // hRequest == NULL
{
InternetCloseHandle(hConnect); 
InternetCloseHandle(hInternet);
return FALSE;
}
}
else // hConnect == NULL
{
InternetCloseHandle(hInternet);
}
}
else // hInternet == NULL
return FALSE;

return TRUE;
}


Право записи в папку MyWebSite/Upload выставлено.
добавлена разметка — Кодт


10.06.09 15:57: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.