2013-11-15 3 views
0

이미 동일한 질문이 있었다 null을 반환하지만 하나의 답변이 도움이되지 않습니다 : 그래서 Qt Download File - QNetworkAccessManager, not getting data데이터 검색 : 파일이 다운로드되어 있지만 QNetworkReply는 :: READALL는

, 나는 다운로드하려고 해요 파일 :

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에서 판단.

중요한 설명 : 거의 동일한 코드가 동일한 컴퓨터의 다른 프로젝트에서 작동합니다. 나는 차이점을 찾으려고 노력하고 있지만, 지금까지 아무 것도 보지 못했습니다.

데이터는 어디에 있습니까?

+0

는'reply-> 속성 (QNetworkRequest :: HttpStatusCodeAttribute) '값을 확인하시기 바랍니다

나는 항상 파일을 저장하려면이 옵션을했다. –

+0

@PavelStrakhov : 나는 또한 Q_ASSERT (reply-> attribute (QNetworkRequest :: HttpStatusCodeAttribute) .toInt() == 200);를 가지지 않는다. 그것을 포함하도록 코드를 업데이트하십시오. –

+0

수신 한 데이터가 네트워크 스니퍼를 통해 보입니까? – peppe

답변

0

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())); 
} 
+0

나는 그것을 시도 할 것이지만 그것이 어떤 차이를 만들 것이라고는 생각하지 않는다. 이 질문에서 지정한 기본 코드는 다른 프로젝트에서 작동하기 때문에 정확합니다. –

+0

QNetworkAccessManager를 사용하여 개발하지는 않았지만 잘 기억하지 못했지만 readyRead()를 사용하지 않고 어떻게 물리적으로 데이터를 저장할 수 있습니까? –

+0

또 다른 방법은 내 질문에 - 완결()'신호와'reply-> readAll()' –