C++ 使用QNetworkAccessManager从web检索数据:文件已下载,但QNetworkReply::readAll返回null
同样的问题已经存在,但单一的答案没有帮助: 因此,我尝试下载一个文件:C++ 使用QNetworkAccessManager从web检索数据:文件已下载,但QNetworkReply::readAll返回null,c++,qt,qtnetwork,C++,Qt,Qtnetwork,同样的问题已经存在,但单一的答案没有帮助: 因此,我尝试下载一个文件: QNetworkRequest request; request.setUrl(QUrl(fileUrl)); QNetworkReply * reply = m_nam.get(request); connect(reply, SIGNAL(finished()), this, SLOT(onDownloadRequestFinished()), Qt::UniqueConnection); connect(reply,
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();
}
QNetworkReply*reply=qobject_cast(sender());
如果(回复和回复->错误()==QNetworkReply::NoError){
Q_断言(应答->属性(QNetworkRequest::HttpStatusCodeAttribute).toInt()==200);
qDebug()是否已连接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()));
}
请检查reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)
value@PavelStrakhov:我还有Q\u断言(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()=200);
,它不会触发。请更新代码以包含它。您是否通过网络嗅探器查看收到的数据?@peppe:我手头没有嗅探器,但我100%确定文件正在下载。我会尝试一下,但不认为这会有任何区别。我在问题中指定的基本代码是正确的,因为它在另一个p项目。我没有使用QNetworkAccessManager之类的工具来开发它,所以我记不太清楚,但是如果没有readyRead(),如何保存物理数据呢?我的问题中演示了另一种方法-finished()
signal和reply->readAll()