簡體   English   中英

使用QNetworkAccessManager從Web檢索數據:已下載文件,但QNetworkReply :: readAll返回null

[英]Retrieving data from web with QNetworkAccessManager: the file is downloaded but QNetworkReply::readAll returns null

已經存在相同的問題,但單個答案沒有幫助: Qt下載文件-QNetworkAccessManager,未獲取數據

因此,我正在嘗試下載文件:

QNetworkRequest request;
request.setUrl(QUrl(fileUrl));
QNetworkReply * reply = m_nam.get(request);
connect(reply, SIGNAL(finished()), this, SLOT(onDownloadRequestFinished()), Qt::UniqueConnection);
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(onDownloadRequestProgress(qint64, qint64)), Qt::UniqueConnection);

並在onDownloadRequestFinished插槽中:

QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
if (reply && reply->error() == QNetworkReply::NoError) {
   Q_ASSERT(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200);
   qDebug() << "reply " << reply->bytesAvailable() << reply->pos() << reply->size() << reply->isReadable() << reply->openMode() << reply->isOpen();
}

該插槽將打印以下內容: reply 0 0 0 true OpenMode( "ReadOnly" ) true因此,沒有數據。 但是,我可以清楚地看到它確實在某處下載了一些內容。 onDownloadRequestProgress來看,它是一個大文件,並且確實下載了該文件。

重要說明:幾乎相同的代碼可在同一台計算機上的另一個項目中工作。 我正在嘗試查找差異,但到目前為止沒有發現差異。

數據在哪

您是否已連接readyRead()信號將接收到的字節寫到特定文件中?

我總是這樣做來保存文件:

 const QNetworkRequest& request = QNetworkRequest(url);
 reply = qnetworkaccessmanager->get(request);
 QObject::connect(reply, SIGNAL(readyRead()), this,
        SLOT( readingReadyBytes() ));

然后我創建我的廣告位:

 void yourClass::readingReadyBytes() {
    file->write(reply->read(reply->bytesAvailable()));
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM