crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> загрузка картинки на сайт методом пост multipart/form-data
eldar85
  опции профиля:
сообщение 15.10.2010, 10:47
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


никак не пойму как создать массив байтов multipart/form-data чтобы отправить картинку на сайт с помощью qnetworkaccessmanager. Кто нибудь пробывал подобное, нифига не получается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.10.2010, 11:04
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


eldar85,
вот схожие темы
00
01

вот RFC только на английском
подобная тема на qtcentre
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 16.10.2010, 9:55
Сообщение #3


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


http://www.qtcentre.org/archive/index.php/t-25255.html
тут вроде китаец привел не плохой пример, буду разбираться, теперь хоть ясно в какую сторону копать, а то почти везде используется QHTTP а я хочу с помощью QNetworkAсcessManager все сделать)) как получиться выложу код)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.10.2010, 11:06
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(eldar85 @ 16.10.2010, 10:55) *
как получиться выложу код)

обязательно, лучше с подробными комментариями.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 16.10.2010, 13:04
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


В принципе, все очень просто - http://ufna.ru/2010/10/16/qt-post-multipart-form-data
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 16.10.2010, 20:40
Сообщение #6


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


хмм, вроде все ясно но не выходит, мне нужно сформировать подобного вида отправляемый бинарник

    curl_formadd(&post, &last,   CURLFORM_COPYNAME, "method",   CURLFORM_COPYCONTENTS, "post", CURLFORM_END);  
    curl_formadd(&post, &last,   CURLFORM_COPYNAME, "key",   CURLFORM_COPYCONTENTS, ackey.c_str(), CURLFORM_END);  
    curl_formadd(&post, &last,   CURLFORM_COPYNAME, "file",   CURLFORM_FILE, img.c_str(), CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);


это отправка курлом, мне нужно сделать подобное методами Qt.
Сделал вот так

QByteArray array;
    array.append("-----------------------------200242615429510\r\n");
    array.append("content-disposition: ");
    array.append("method=post");
    array.append("\r\n");
    array.append("-----------------------------200242615429510\r\n");
    array.append("content-disposition: ");
    array.append("key=a1683bc4a2768f2c0jhkjhklliui15");
    array.append("\r\n");
    array.append("-----------------------------200242615429510\r\n");
    array.append("Content-Transfer-Encoding: binary\r\n");
    array.append("\r\n");
    array.append(file.readAll());
    array.append("\r\n");
    array.append("-----------------------------200242615429510--");

    qDebug() << array;
    QNetworkAccessManager* pManager = new QNetworkAccessManager();
    QNetworkReply *reply = pManager->post(request, array);
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    qDebug() << reply->readAll();


но отправка получается неправельной.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 16.10.2010, 21:23
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


ну ты key неверно задаешь

сделай как в моем примере, поставь key вместо моего __PARAM_NAME__, а его значение - вместо "__your PARAM_NAME data in TEXT__"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 16.10.2010, 21:57
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


file кстати тоже не задаешь. Сделай как у меня - это проверенный вариант
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 16.10.2010, 22:16
Сообщение #9


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо, сейчас попробую))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 16.10.2010, 22:54
Сообщение #10


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


QNetworkRequest request;
    QEventLoop loop;
    
    
    QFile file("c:/8788.jpg");
    if(!file.open(QIODevice::ReadOnly)) {qDebug() << "error"; return 1;}
    
    
    request.setRawHeader("Host", "yoursait.com");
    request.setUrl(QUrl("http://yoursait.com/in.php"));
    request.setRawHeader("Content-Type", "multipart/form-data; boundary=---------------------------200242615429510");
    
    
    QByteArray array;
    array.append("-----------------------------200242615429510\r\n");
    array.append("Content-disposition: ");
    array.append("form-data; name=\"method\"\r\n");
    array.append("\r\n");
    array.append("post");
    array.append("\r\n");
    array.append("-----------------------------200242615429510\r\n");
    array.append("Content-disposition: ");
    array.append("form-data; name=\"key\"\r\n");
    array.append("\r\n");
    array.append("a1683bc4jhkjhkhkgutiuftsdrsr62dkiu");
    array.append("\r\n");
    array.append("-----------------------------200242615429510\r\n");
    array.append("-----------------------------200242615429510\r\n");
    array.append("Content-disposition: ");
    array.append("form-data; name=\"file\"; filename=\"img.jpg\"\r\n");
              array.append("Content-Type: image/jpeg");
    array.append("\r\n");
    array.append("\r\n");
    array.append(file.readAll());
    array.append("\r\n");
    array.append("-----------------------------200242615429510--");
    
    qDebug() << array;
    QNetworkAccessManager* pManager = new QNetworkAccessManager();
    QNetworkReply *reply = pManager->post(request, array);
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    qDebug() << reply->readAll();
    
    return 0;


вот в таком виде все работает отлично)) спасибо за помощь)

Сообщение отредактировал eldar85 - 17.10.2010, 8:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.8.2020, 20:16