Upload file with progress
-
Hi,
Something is not clear. Are you trying to upload a file through C++ or are you trying to mix C++ and HTML ?
-
in case you want to do the same like the browser with a HTML-form would do take a look at QHttpMultiPart class (it takes care of the request boundary and you can compose your custom parts together and send them via QNAM):
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart textPart; textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\"")); textPart.setBody("my text"); QHttpPart imagePart; imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg")); imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\"")); QFile *file = new QFile("image.jpg"); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file); file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart multiPart->append(textPart); multiPart->append(imagePart); QUrl url("http://my.server.tld"); QNetworkRequest request(url); QNetworkAccessManager manager; QNetworkReply *reply = manager.post(request, multiPart); multiPart->setParent(reply); // delete the multiPart with the reply // here connect signals etc.
Then use QnetworkAccessManager::post() to send the request and connect to the returned QNetworkReply's uploadProgress() signal.
-
@raven-worx I use your code like this:
mainwindow.cpp:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"private_upload\"")); textPart.setBody("0"); imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/png")); imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userfile\"")); file = new QFile("test.png"); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file); file->setParent(multiPart); multiPart->append(textPart); multiPart->append(imagePart); url = QUrl("http://8pic.ir/upload.php"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_btnUploadFile_clicked() { QNetworkRequest request(url); QNetworkAccessManager manager; QNetworkReply *reply = manager.post(request, multiPart); multiPart->setParent(reply); delete multiPart; connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onReqFinished(QNetworkReply*))); } void MainWindow::onReqFinished(QNetworkReply *reply) { QMessageBox::information(this, "Response", reply->readAll()); }
mainwindow.h:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QUrl> #include <QFile> #include <QHttpPart> #include <QMessageBox> #include <QNetworkReply> #include <QHttpMultiPart> #include <QNetworkRequest> #include <QNetworkAccessManager> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_btnUploadFile_clicked(); void onReqFinished(QNetworkReply *reply); private: Ui::MainWindow *ui; QHttpMultiPart *multiPart; QHttpPart textPart; QHttpPart imagePart; QFile *file; QUrl url; }; #endif // MAINWINDOW_H
But unfortunately, it didn't work!!
I couldn't get any response!! -
In on_btnUploadFile_clicked you are creating a local QNetworkAccessManager, it will be destroyed at the end of the function.
You are also deleting the multipart before it's been sent.
-
@AliReza-Beytari Oh, I forgot to send "filename" !! Now it completely works.
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"userfile[]\"; filename=\"test.png\""));
-
I use this code for parsing the HTML codes:
void MainWindow::onReqFinished(QNetworkReply *reply) { QString source = QString::fromUtf8(reply->readAll()); QWebPage page; page.mainFrame()->setHtml(source); QWebElement parse = page.mainFrame()->documentElement(); QString count = QString::number(parse.findAll("a").count()); QMessageBox::information(this, "Count", src); }
But "count" returns "0"; even though html code has "a" tag !!
Where is the problem?! -
How do you count returns 0 ?
-
@AliReza-Beytari
now the question is what reply->readAll() really returns.
Or possibly the response is a HTTP redirect? In such a case you would need check that for yourself and reissue a new request to the redirected url. -
You don't pass count to your message box but src.
-
@raven-worx I have checked reply->readAll(). It completely works and returns the HTML contents.
@SGaist Yes. I forgot to change the code in forum. I pass the count variable but still returns "0" :(
-
This is the HTML contents that I get (it has some Persian words [utf-8]):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript"> </script> <title>آپلود عکس » آپلود</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Language" content="fa" /> <meta http-equiv="imagetoolbar" content="no" /> <meta name="google-site-verification" content="_DnZc06HuVAYaR1HLuYKYIgs9j8ofaXd2FgBrNX9Pd8" /> <meta name="version" content="Mihalism Multi Host v5.0.3" /> <meta name="subject" content="آپلود تصاویر" /> <meta name="Revisit-After" content="1 Days" /> <meta name="Distribution" content="Global" /> <meta name="Author" content="Hadi Behgam" /> <meta name="ROBOTS" content="INDEX, FOLLOW, ALL" /> <meta name="generator" content="آپلود , آپلود عكس , آپلود سنتر , آپلود فايل , آپلود دائمي , آپلود نامحدود , آپلود رايگان , آپلود تصوير" /> <meta name="keywords" content="آپلود عکس,آپلود رایگان عکس,آپلود سنتر عکس,آپلودعکس,سایت آپلود عکس,آپلود عکس دائمی,آپلود عکس رایگان,آپلود,آپلود تصاویر" /> <meta name="description" content="آپلود عکس,آپلود سنتر عکس,سایت آپلود عکس,آپلود عکس دائمی,آپلود عکس رایگان,آپلود,آپلود عکس عمومی,عکس,آپلود تصاویر" /> <base href="http://8pic.ir/" /> <!--[if IE]> <link rel="stylesheet" href="css/Style2/ie.css" /> <![endif]--> <link rel="StyleSheet" href="css/Style2/style.css" type="text/css" /> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen" /> <link rel="shortcut icon" href="css/images/favicon.ico" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="source/includes/scripts/jquery.js"></script> <script type="text/javascript" src="source/includes/scripts/genjscript.js"></script> <script type="text/javascript" src="css/js/jquery.easing.min.js"></script> <script type="text/javascript" src="source/includes/scripts/phpjs_00029.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery.jdMenu.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery.bgiframe.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery.positionBy.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery.dimensions.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery-1.5.min.js"></script> <script type="text/javascript" src="source/includes/scripts/jquery.lavalamp.min.js"></script> <script> $(document).ready(function() { //select all the a tag with name equal to modal $('a[name=modal]').click(function(e) { //Cancel the link behavior e.preventDefault(); //Get the A tag var id = $(this).attr('href'); //Get the screen height and width var maskHeight = $(document).height(); var maskWidth = $(window).width(); //Set heigth and width to mask to fill up the whole screen $('#mask').css({'width':maskWidth,'height':maskHeight}); //transition effect $('#mask').fadeIn(1000); $('#mask').fadeTo("slow",0.8); //Get the window height and width var winH = $(window).height(); var winW = $(window).width(); //Set the popup window to center $(id).css('top', winH/2-$(id).height()/2); $(id).css('left', winW/2-$(id).width()/2); //transition effect $(id).fadeIn(2000); }); //if close button is clicked $('.window .close').click(function (e) { //Cancel the link behavior e.preventDefault(); $('#mask').hide(); $('.window').hide(); }); //if mask is clicked $('#mask').click(function () { $(this).hide(); $('.window').hide(); }); }); </script> <script type="text/javascript" src="css/Style2/js/jquery-1.7.1.min.js" ></script> <div class="widget"><a class="widget-button Home" title="بازگشت به صفحه اول سایت" href="http://8pic.ir/"></a><br/> <a target="_blank" class="widget-button idea" title="درباره ما" href="info.php?act=about_us"></a><br/> <a target="_blank" class="widget-button faq" title="شرایط سرویس دهی" href="info.php?act=rules"></a><br/> <a target="_blank" class="widget-button img" title="گالری عمومی" href="gallery.php"></a><br/> <a target="_blank" class="widget-button contact" title="تماس با ما" href="contact.php?act=contact_us"></a><br/> <a target="_blank" class="widget-button fb" title="به هواداران سایت در فیسبوک بپیوندید" href="http://www.facebook.com/pages/8picir/212896008763411"></a></div> <script type="text/javascript" src="css/Style2/js/tipsymin.js" ></script> <script type="text/javascript">$(function() { $('.widget-button, .comment-like-btn').tipsy({gravity: 'w',fade: true}); $('.LaPS, .ngg-widget img, .most-view a, #footer-credits a').tipsy({gravity: 's',fade: true}); });</script> <noscript> <div class="slideout_warning"> <span class="picture"> </span> <span class="info"> JavaScript is Disabled! Your browser currently has JavaScript disabled or does not support it. Since this website uses JavaScript extensively it is recommended to <a href="http://support.microsoft.com/gp/howtoscript">enable it</a>. </span> </div> </noscript> </head> <body> <div id="boxes"> <div id="dialog" class="window"> تعرفه تبلیغات در سایت هشت پیک<br /> برای دیدن تعرفه تبلیغات بر روی لینک زیر کلیک کنید <br /> <br /> <a href="http://www.8pic.ir/ads.htm"><strong>تعرفه تبلیغات</strong></a> <br /> <br /> جهت درج تبلیغات با ایمیل <a href="mailto:info@8pic.ir" target="_blank">info@8pic.ir</a> در تماس باشید. <br /> و یا به <a href="/contact.php?act=contact_us">صفحه تماس با ما</a> مراجعه کنید. <br /> <div class="close"><a href="#"/>بستن</a></div> </div> <div id="mask"></div> </div> <div class="hdrmnu"><div class="inwrapper"><div class="mnu"><div class="items"> <a href="/">صفحه اصلی</a> <a href="info.php?act=about_us">درباره ما</a> <a href="info.php?act=rules">شرایط سرویس دهی</a> <a href="http://www.blog.8pic.ir/">وبلاگ</a> <a href="contact.php?act=file_report">گزارش</a> <a href="tools.php">ابزار</a> <a href="#dialog" name="modal">تبلیغات</a> </div></div></div> <div class="hdrmnu1"><div class="inwrapper"><div class="mnu"><div class="items"> <form action="/users.php?act=login-d" method="post" enctype="multipart/form-data"> <input type="text" class="textbox" name="username" value="نام کاربری" onblur="if(this.value=='') this.value='نام کاربری';" onfocus="if(this.value=='نام کاربری') this.value='';"/> <input type="password" class="textbox" name="password" value="رمز عبور" onblur="if(this.value=='') this.value='رمز عبور';" onfocus="if(this.value=='رمز عبور') this.value='';"/> <input type="submit" class="loginbutton" value="ورود"/> <a class ="register" style="right: 210px;top: 16px;" href="users.php?act=register&return=aHR0cDovLzhwaWMuaXIvdXBsb2FkLnBocA==">ثبت نام</a> </form> </div></div></div> <div class="wrapper1"> <div class="bodyset1"> <div class="mro"> <div align="center"> <div class="main-post"> <a target="_blank" href="http://farzanhost.com/special-offers/" rel="nofollow"><img alt="تبلیغات" title="تبلیغات" src="http://www.8pic.ir/images/8h5kdsn8iorj1rt18ngq.gif" height="140" width="950"></a><!-- 28-08-94 - 05-9-94 --> <a target="_blank" href="http://www.mobldekorasion.com/" rel="nofollow"><img alt="تبلیغات" title="تبلیغات" src="http://www.8pic.ir/images/ue64gp6t0dybjehyftd3.gif" height="60" width="468"></a><!-- 18-09-94 - 20-10-94 --> <a target="_blank" href="http://www.mftcamp.ir" rel="nofollow"><img alt="تبلیغات" title="تبلیغات" src="http://www.8pic.ir/images/6ttev142robo62zgcqlq.gif" height="60" width="468"></a><!-- 14-10-94 - 14-11-94 --> <!-- <a target="_blank" href="http://www.8pic.ir/ads.htm" rel="nofollow"><img alt="تبلیغات" title="تبلیغات" src="http://www.8pic.ir/images/20lhmx3tup6rgwmyn3jw.gif" height="60" width="468"></a> --> </div> </div></div></div></div> <div style="clear: both;"></div> <div id="page_body" class="page_body"> <div class="wrapper3"> <div class="bodyset3"> <br> <div style="text-align: center;"> <a href="http://8pic.ir/viewer.php?file=x2tkjbsf5xec6i6ltsnu.png" class="button">نمايش عکس اصلي</a> </div> <br> <table cellpadding="5" cellspacing="0" border="0" style="width: 100%;"> <tr> <td style="width: 80%;"> <table cellspacing="1" cellpadding="0" border="0" style="width: 100%;"> <tr> <td>لينک مستقيم:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="" /></td> </tr> <tr> <td>پیش نمایش اصلی:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="http://8pic.ir/viewer.php?file=x2tkjbsf5xec6i6ltsnu.png" /></td> </tr> <tr> <td>پيش نمايش براي وب سايت:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="<a href="http://8pic.ir/viewer.php?file=x2tkjbsf5xec6i6ltsnu.png"><img src="http://8pic.ir/images/x2tkjbsf5xec6i6ltsnu_thumb.png" border="0" alt="آپلود عکس" title="آپلود عکس" /></a>" /></td> </tr> <tr> <td>پيش نمايش براي انجمن:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="[URL=http://8pic.ir/viewer.php?file=x2tkjbsf5xec6i6ltsnu.png][IMG]http://8pic.ir/images/x2tkjbsf5xec6i6ltsnu_thumb.png[/IMG][/URL]" /></td> </tr> <tr> <td>لينک به ما:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="با تشکر از سایت آپلود عکس <a href="http://8pic.ir/">برای میزبانی رایگان عکس و فایل</a>" /></td> </tr> <tr> <td>لينک مستقيم براي انجمن:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="[URL=http://8pic.ir/][IMG]http://8pic.ir/images/x2tkjbsf5xec6i6ltsnu.png[/IMG][/URL]" /></td> </tr> <tr> <td>لينک مستقيم براي وبسايت:</td> <td><input readonly="readonly" class="input_field" onclick="highlight(this);" type="text" style="width: 605px; text-align: left;" value="<a href="http://8pic.ir/"><img src="http://8pic.ir/images/x2tkjbsf5xec6i6ltsnu.png" border="0" alt="آپلود عکس" title="آپلود عکس" /></a>" /></td> </tr> </table> </td> <td style="width: 20%;" valign="middle" class="text_align_center"> <div class="main-post"><a href="http://8pic.ir/viewer.php?file=x2tkjbsf5xec6i6ltsnu.png"><img src="index.php?module=thumbnail&file=x2tkjbsf5xec6i6ltsnu.png" alt="x2tkjbsf5xec6i6ltsnu.png" style="width: 42.96875px; height: 125px;" /></a></div> </td> </tr> </table> <div class="main-post"> <div align="center"> <img src="css/line.jpg" alt="Line" title="Line" /> </div></div> <div align="center"> <table border="0" cellpadding="1" cellspacing="1" style="width: 950px;"> <tbody> <tr> <td> <div class="main-post"><img src="css/tag.png" alt="تبلیغات" title="تبلیغات" /></div> </td> <td> <br> <p style="color:ffffff;font-size:11px;text-align: justify;"> <!-- <a target="_blank" href='http://www.8pic.ir/ads.htm'><img alt="محل تبلیغات شما" title="محل تبلیغات شما" src='http://www.8pic.ir/images/7npqucoist3e22ofn2al.jpg'> </a>--> <a title="دانلود آهنگ جدید" href="http://www.8melody.ir/" target="_blank"><img src="http://8pic.ir/images/60847245504074681653.gif" title="دانلود آهنگ جدید" width="645" height="100" border="0" alt="دانلود آهنگ جدید" /></a> </p> </td> <td> <div align="center"> <div class="textads"><a target="_blank" href="http://www.8melody.ir/" title="دانلود آهنگ جدید"><div class="adsblue">دانلود آهنگ جدید</div><span>دانلود آهنگ جدید</span></div></a> <div class="textads"><a target="_blank" href="http://www.pelanhaa.ir" title="دانلود فیلم ایرانی"><div class="adsorange">دانلود فیلم ایرانی</div><span>دانلود فیلم ایرانی</span></div></a> <div class="textads"><a href="contact.php?act=contact_us"><div class="adsgreen">تبلیغات</div><span>محل تبلیغات شما</span></div></a> </div> </td> </tr> </tbody> </table> </div> <div class="ftpg"><div class="inwrapper"> <div class="copyright"> <div align="right"> <span style="color: #c0c0c0;font-family: Yekan;font-size:13px;"> <a href="http://www.mihalism.net/multihost/"> </a> | <a href="info.php?act=privacy_policy">حریم شخصی</a> | <a href="contact.php?act=contact_us">تماس با ما</a> | نمایش صفحه: 211,613,294 | لود صفحه: 0.023 ثانیه </span> </div> <div align="right"> <span style="color: #c0c0c0;font-family: Yekan;font-size:13px;"> این سایت تنها یک محل برای بارگزاری فایل می باشد و تمامی مسئولیت استفاده غیر قانونی بر عهده خود فرد می باشد. </span> </div> </div> </div></div> <script type="text/javascript"> google_stats("UA-39308523-1"); </script> <div style="display: none"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-39308523-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <script type="text/javascript" src='http://popmaster.ir/pop.php?user=1169&poptimes=mix'></script> </div> <a href="http://www.8pic.ir/?آپلود عکس">آپلود عکس</a> - <a href="http://www.8pic.ir/?آپلود فایل">آپلود فایل</a> - <a href="http://www.8pic.ir/?آپلود رایگان">آپلود رایگان</a> - <a href="http://www.8pic.ir/?آپلود فیلم">آپلود فیلم</a> - <a href="http://www.8pic.ir/?آپلود موزیک">آپلود موزیک</a> - <a href="http://www.8pic.ir/?آپلود آهنگ">آپلود آهنگ</a> - <a href="http://www.8pic.ir/?آپلود رایگان فایل">آپلود رایگان فایل</a> - <a href="http://www.8pic.ir/?آپلود رایگان">آپلود رایگان</a> - <a href="http://www.8pic.ir/?سایت آپلود فیلم">سایت آپلود فیلم</a> - <a href="http://www.8pic.ir/?آپلود فایل زیپ">آپلود فایل زیپ</a> - <a href="http://www.8pic.ir/?آپلود موزیک">آپلود موزیک</a> - <a href="http://www.8pic.ir/?آپلود فایل با لینک مستقیم">آپلود فایل با لینک مستقیم</a> - <a href="http://www.8pic.ir/?آپلود رایگان عکس">آپلود رایگان عکس</a> - <a href="http://www.8pic.ir/?آپلود رایگان فیلم">آپلود رایگان فیلم</a> - <a href="http://www.8pic.ir/?آپلود رایگان موزیک">آپلود رایگان موزیک</a> - <a href="http://www.8pic.ir/?آپلود رایگان آهنگ">آپلود رایگان آهنگ</a> - <a href="http://www.8pic.ir/?سایت آپلود رایگان عکس">سایت آپلود رایگان عکس</a> - <a href="http://www.8pic.ir/?سایت آپلود عکس">سایت آپلود عکس</a> - <a href="http://www.8pic.ir/?سایت آپلود فایل">سایت آپلود فایل</a> - <a href="http://www.8pic.ir/?سایت آپلود آهنگ">سایت آپلود آهنگ</a> - <a href="http://www.8pic.ir/?سایت آپلود موزیک">سایت آپلود موزیک</a> - <a href="http://www.8pic.ir/?فضای رایگان">فضای رایگان</a> - <a href="http://www.8pic.ir/?آپلود گرافیک">آپلود گرافیک</a> - <a href="http://www.8pic.ir/?آپلود آیکون">آپلود آیکون</a> - <a href="http://www.8pic.ir/?آپلود بنر">آپلود بنر</a> - <a href="http://www.8pic.ir/?هاست عکس">هاست عکس</a> - <a href="http://www.8pic.ir/?هاست مجانی">هاست مجانی</a> - <a href="http://www.8pic.ir/?آپلودسنتر نامحدود">آپلودسنتر نامحدود</a> - <a href="http://www.8pic.ir/?هاست مجانی">هاست مجانی</a> - <a href="http://www.8pic.ir/?اپلود کردن در چند سایت">اپلود کردن در چند سایت</a> - <a href="http://www.8pic.ir/?بهترین آپلود سنتر کدام است؟">بهترین آپلود سنتر کدام است؟</a> - <a href="http://www.8pic.ir/?آپلود زیرنویس">آپلود زیرنویس</a> - <a href="http://www.8pic.ir/?آپلود برنامه">آپلود برنامه</a> - <a href="http://www.8pic.ir/?آپلود نرم افزار">آپلود نرم افزار</a> - <a href="http://www.8pic.ir/?بهترین مکان برای آپلود عکس">بهترین مکان برای آپلود عکس</a> - <a href="http://www.8pic.ir/?آپلود فتوشاپ">آپلود فتوشاپ</a> - <a href="http://www.8pic.ir/?آپلود کلیپ">آپلود کلیپ</a> - <a href="http://www.8pic.ir/?آپلود موسیقی">آپلود موسیقی</a> - </body> </html> <!-- Powered by Mihalism Multi Host - Copyright (c) 2007, 2008, 2009 Mihalism Technologies (www.mihalism.net) -->
I also get this error: "QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once."
-
@AliReza-Beytari said:
I also get this error: "QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once."
This warning is raised when you call error() multiple times on the network reply.
Do you use a custom network reply or similar? -
@raven-worx said:
@AliReza-Beytari said:
I also get this error: "QNetworkReplyImplPrivate::error: Internal problem, this method must only be called once."
This warning is raised when you call error() multiple times on the network reply.
Do you use a custom network reply or similar?No.
-
"QWebElement parse" cannot return any element!!