[英]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.