Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Передача файла на сервер


Автор: Rain789 31.1.2011, 22:13
Привет всем.

Есть программа (C++, MS VS 2010, MFC AppWizard).
Пользователь выбирает файл с помощью CFileDialog.
Далее пользователь нажимает "Загрузить" и файл должен передаваться php скрипту, который его обрабатывает и загружает, в ответ программа должна получить имя файла, которое ему присвоил php скрипт.
Предполагаю что программа должна отправлять методом POST.

Но как это реализовать? 
Интересует именно самый короткий и быстрый вариант.

Заранее спасибо.

Автор: Dem_max 1.2.2011, 17:06
Вот класс с примером

разработал AZote(www.izireleaser.ru)


Добавлено
вот выложено по моей просьбе
http://forum.sources.ru/index.php?showtopic=324736

Автор: Alca 1.2.2011, 19:25
del

Автор: Rain789 1.2.2011, 21:10
Цитата(Dem_max @ 1.2.2011,  17:06)
Вот класс с примером

разработал AZote(www.izireleaser.ru)


Добавлено
вот выложено по моей просьбе
http://forum.sources.ru/index.php?showtopic=324736

Спасибо за класс, попробую его.

Но всё же хотелось бы реализовать просто через сокеты.
Вот так получилось у меня, но где-то ошибка, ибо по идеи он запрос-то отправляет и похоже не правильный, а где ошибка понять не могу(

Код

void CProgDlg::OnBnClickedStartUp()
{
    BOOL answer;

    if( !AfxSocketInit() )
    {
        AfxMessageBox( L"Ошибка инициализации сокета!", MB_OK | MB_ICONSTOP); 
    }

    CSocket MySocket;
    MySocket.Create(0, SOCK_STREAM, NULL);

    if(!MySocket.Connect(L"www.site.ru", 80))
    {
        AfxMessageBox( L"Ошибка соединения!", MB_OK | MB_ICONSTOP); 
    }
    else answer = TRUE;



    CString pBuff = NULL;
    char *send_data = NULL;
    char *pRecv = NULL;
    if(answer)
    {
        char *pBuffer = new char[1024];
        
        CFile myFile(File.GetPathName(),CFile::modeRead|CFile::typeBinary);
        
        pBuff = "POST /index.php HTTP/1.1\r\nHost: www.site.ru\r\n";
        pBuff += "Cookie: income=1\r\n ";
        pBuff += "Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n";
        pBuff += "Content-Length: ";
        char dlina = (300 + myFile.GetLength());
        pBuff += dlina;
        pBuff += "\r\n";
        pBuff += "\r\n--1BEF0A57BE110FD467A\r\n";
        pBuff += "Content-Disposition: form-data; name=\"image_head\"\r\n";
        pBuff += "\r\nimage_head\r\n";
        pBuff += "\r\n--1BEF0A57BE110FD467A\r\n";
        pBuff += "Content-Disposition: attachment; filename=\"image.gif\"\r\n";
        pBuff += "Content-Type: image/gif\r\n";
        pBuff += "Content-Transfer-Encoding: binary\r\n";
        pBuff += "\r\n";

        for( int i=0; i <= myFile.GetLength(); i += 1024)
        {
            myFile.Read(pBuffer, 1024);
            pBuff += pBuffer;
        }

        pBuff += "\r\n--1BEF0A57BE110FD467A--\r\n";

        int e = pBuff.GetLength();

        MySocket.Send(pBuff, e);

        MySocket.Receive(pRecv, 1024, 0);


        myFile.Close();
        delete[] pBuff;
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)