Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.225.11.98] |
|
Сообщ.
#1
,
|
|
|
Мне нужно отправить данные на веб-сервер одновременно текстовые и несколько файлов, у каждого поля формы есть идентификатор, который мне известен. Если с обычными текстовыми данными мне все ясно, то с файлами не так все очевидно. Видел пример в суппорте Майкрософта по отсылке файла, но не понял как в одном запросе вместе с файлом переслать и текстовые данные. Кроме того, если нужно закачать несколько файлов, то где мне указать идентификатор поля ввода, которому соответствует файл? Приведите кусочек кода, или пните в нужную сторону, или просто опишите кратко последовательность вызова функций и примерно опишите параметры.
Пример из суппорта Майкрософта по отсылке одного файла: BOOL UseHttpSendReqEx(HINTERNET hConnect, TCHAR *upFile) { 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 ); HINTERNET hRequest = HttpOpenRequest (hConnect, "PUT", "/test/page.htm", 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; } return TRUE; } |
Сообщ.
#2
,
|
|
|
Ну на сколько я понимаю это, закачку файла должен осуществлять сам сервер, т.е. ты ему передаешь только путь к файлу, ну а там какой то скрипт делает всю грязь.
Либо изначально считав файл присваеваешь его какой нить переменой в запросе т.е. fname=text.txt&text=sdfgsdfg sdfg dsfg dsfg dsfgsdfg sdfg sdfg dsfg dsfg sdfg dsfg dsfg dfsgdfs gdfg ну а не сервере какой то скрипт доложен создать файл с именем text.txt и записать туда данные из переменной text если поможет как формировать пост запрос вот пара ссылок вот вот |
Сообщ.
#3
,
|
|
|
Nahel, не, не так все просто. Решил заюзать библиотечку, чтобы не париться самому: CHttpClient
|