Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2012, 14:34   #1
Хоттабич
статус
Пользователь
 
Регистрация: 21.05.2008
Сообщений: 35
По умолчанию Отправить файл на сервер

Приветствую всех, есть проблема с отправкой запроса на сервер, в запросе отправляю файл вот таким образом:
Код:

	LPSTR hdrs ="Content-type: multipart/form-data, boundary=Jfbvjwj3489078yuyetu";
	static LPSTR accept[2]={"*/*", NULL};
	
	LPSTR szFile = "C:\\12345.jpg";
	LPSTR szFileName = "12345.jpg";


	HANDLE hFile;
	DWORD dwFileSize, dwRead;  
	LPBYTE pBuf = NULL;
	LPBYTE pDataStart = NULL;
	DWORD dwDataToSend = 0;
	long x;

	LPSTR szFnamePrefix = "--Jfbvjwj3489078yuyetu\r\ncontent-disposition: form-data; name=\"fname\"\r\n\r\n";
	LPSTR szDataPrefix = "\r\n--Jfbvjwj3489078yuyetu\r\ncontent-disposition: form-data; name=\"data\"; 
filename=\"12345.jpg\"\r\nContent-Type: application/octet-stream\r\n\r\n";
	LPSTR szDataPostfix = "\r\n--Jfbvjwj3489078yuyetu--";

	hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);  
	dwFileSize = GetFileSize(hFile, NULL);  
	pBuf = (LPBYTE)HeapAlloc(GetProcessHeap(), 0, dwFileSize + 2048);

	pDataStart = pBuf;
	x = lstrlen(szFnamePrefix);
	lstrcpyn((LPSTR)pDataStart, szFnamePrefix, x + 1);
	pDataStart += x;

	x = lstrlen(szFileName);
	lstrcpyn((LPSTR)pDataStart, szFileName, x + 1);
	pDataStart += x;

	x = lstrlen(szDataPrefix);
	lstrcpyn((LPSTR)pDataStart, szDataPrefix, x + 1);
	pDataStart += x;

	ReadFile(hFile, pDataStart, dwFileSize, &dwRead, NULL);
	pDataStart += dwRead;

	x = lstrlen(szDataPostfix);
	lstrcpyn((LPSTR)pDataStart, szDataPostfix, x + 1);
	pDataStart += x;

	dwDataToSend = pDataStart - pBuf;

	HINTERNET hOpenHandle = ::InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
	if(hOpenHandle){
		HINTERNET hConnectHandle = ::InternetConnect(hOpenHandle, TEXT("www.mysite.com"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1u);
		if(hConnectHandle){ Memo2->Lines->Add("Internet connect - true");
			HANDLE hResourceHandle = ::HttpOpenRequest(hConnectHandle, TEXT("POST"), 
TEXT("/some_dir/upload.php"), NULL, NULL, (LPCSTR*)accept, 0, 1);
			if(hResourceHandle){Memo2->Lines->Add("Internet request - true");
			       Memo2->Text = Memo2->Text + ::HttpSendRequest(hResourceHandle, hdrs, 
strlen(hdrs), pBuf, dwDataToSend);
                               DWORD dwError = GetLastError();
                               Memo2->Text = Memo2->Text + " error-"+dwError;
			}
			InternetCloseHandle(hResourceHandle);
		}
		InternetCloseHandle(hConnectHandle);
	}
	InternetCloseHandle(hOpenHandle);

	HeapFree(GetProcessHeap(), 0, pBuf);
	CloseHandle(hFile);
на сервере файл принимает php скрипт и копирует в ту же директорию:
Код:
<?php

    $ip=getenv("REMOTE_ADDR"); 
    copy($_FILES['data']['tmp_name'], $ip."_".basename($_FILES['data']['name'])); 


?>
Когда в InternetConnect прописываю 127.0.0.1 или localhost (файл находится по тому ж адресу /some_dir/upload.php) то на локальном компьютере файл копирует, а с www.mysite.com не хочет работать, причем ошибка выбивает - 0.

Код:
HINTERNET hConnectHandle = ::InternetConnect(hOpenHandle, TEXT("127.0.0.1"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1u);
ПОМОГИТЕ ПОЖАЛУЙСТА...
Безвыходных ситуаций нет, есть ситуации из которых мы не знаем выход.

Последний раз редактировалось rpy3uH; 02.03.2012 в 16:10.
Хоттабич вне форума Ответить с цитированием
Старый 02.03.2012, 15:40   #2
Хоттабич
статус
Пользователь
 
Регистрация: 21.05.2008
Сообщений: 35
По умолчанию

Заметил где обрывается запрос, когда отправляю запрос на сайт mysite.com то все работает, а вот когда на mysite.ukrhost.com то нет, значит проблема в двух точках в имени хоста, может кто подскажет как это обойти?
Безвыходных ситуаций нет, есть ситуации из которых мы не знаем выход.
Хоттабич вне форума Ответить с цитированием
Старый 02.03.2012, 16:16   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

InternetConnect к mysite.ukrhost.com происходит или нет?
rpy3uH вне форума Ответить с цитированием
Старый 02.03.2012, 16:20   #4
Хоттабич
статус
Пользователь
 
Регистрация: 21.05.2008
Сообщений: 35
По умолчанию

Код:
if(hConnectHandle)
это проходит, но судя по тому что запрос не доходит то думаю что нет.
Безвыходных ситуаций нет, есть ситуации из которых мы не знаем выход.
Хоттабич вне форума Ответить с цитированием
Старый 03.03.2012, 17:07   #5
Хоттабич
статус
Пользователь
 
Регистрация: 21.05.2008
Сообщений: 35
По умолчанию

Тему можна закрывать, на сервере стояла переадресация.
Безвыходных ситуаций нет, есть ситуации из которых мы не знаем выход.
Хоттабич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[WinAPI] Как отправить файл на сервер? Ёжик в тумане Win Api 4 11.01.2012 01:10
как отправить файл? RUSlan48 Работа с сетью в Delphi 6 29.03.2010 21:41
Не получается отправить сообщение на сервер zver777 Работа с сетью в Delphi 8 26.10.2009 22:42
Отправить файл по icq mustang007 Работа с сетью в Delphi 0 09.08.2009 14:36
Отправить файлы на сервер Narod.ru GAGARIN-NEW Работа с сетью в Delphi 7 06.07.2008 22:05