Требуется загрузить файл на 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++. Прикладные вопросы' — Кодт