[Solved] QHttpMultiPart genera SIGSEGV
-
Salve a tutti,
ho un problema nell'inviare una richiesta http con dati multipart.
Ho usato l'esempio nella documentazione di QHttpMultiPart come punto di partenza, ma continuo a ricevere un segnale SIGSEGV ogni volta che viene avviata la richiesta web.
Uso Qt 5.2.0 con Mingw 4.8 su Win Vista 32 bit.Qualcuno sa come posso risolvere il problema o indicarmi dove sto sbagliando ?
GrazieMax
Questo il codice:
SendHistory.h
@class SendHistory : public QObject
{
Q_OBJECT
public:
explicit SendHistory(THistoryRequest p_item, QString p_bzippedFileName, QObject *parent = 0);QString getContent() { return data; }
protected:
THistoryRequest item;
QString bzippedFileName;
QNetworkAccessManager http;
QNetworkReply *reply;
QHttpMultiPart *multiPart;
QHttpPart isin, tf, future, filePart;
QFile *file;
QString data;
bool httpRequestAborted;private slots:
void httpFinished();signals:
void done(SendHistory* sender, THistoryRequest item);public slots:
};@
SendHsitory.cpp
@SendHistory::SendHistory(THistoryRequest p_item, QString p_bzippedFileName, QObject *parent) :
QObject(parent)
{
if(!QFile::exists(p_bzippedFileName))
return;
item = p_item;
bzippedFileName = p_bzippedFileName;
data = "";
httpRequestAborted = false;multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); isin.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"isin\"")); isin.setBody(item.isin.toLatin1()); tf.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"tf\"")); tf.setBody(item.tf.toLatin1()); future.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"isFuture\"")); future.setBody(item.future ? "1" : "0"); QFileInfo fi(bzippedFileName); filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-bzip2")); filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"" + fi.fileName() + "\"")); file = new QFile(bzippedFileName); file->open(QIODevice::ReadOnly); filePart.setBodyDevice(file); file->setParent(multiPart); multiPart->append(isin); multiPart->append(tf); multiPart->append(future); multiPart->append(filePart); QString url = Config->scriptURL + "?task=UploadHistoricalData"; QUrl address(url); QNetworkRequest request(address); reply = http.post(request, multiPart); multiPart->setParent(reply); // delete the multiPart with the reply QObject::connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
}
void SendHistory::httpFinished()
{
if(reply==NULL)
return;
if(httpRequestAborted)
data = "";
else
{
QByteArray b = reply->readAll();
reply->close();
data = QString(b.constData());
}
reply->deleteLater(); // cancella anche multiPart e poi file
if(QFile::exists(bzippedFileName))
QFile::remove(bzippedFileName);
emit done(this, item);
}
@