Не получаю ответа от метода публикации QNetworkAccessManager

Я отправляю несколько двоичных данных с помощью QNetworkAccessManager на URL-адрес php. После получения данных php-страница далее отправляет некоторые данные обратно как принудительную загрузку после обработки. Я вижу успешную публикацию на сервер, но после этого я не получаю надлежащего ответа в QNetworkReply, я не вижу никакого исходящего от него сигнала.

//mUploadData is QByteArray

mUploadData.append(QString("--" + mBoundary + "\r\n").toAscii());
mUploadData += "Content-Disposition: form-data; name=\"UserData\";    

filename=\"UserData.trprof\"\r\n";
mUploadData += "Content-Type: application/octet-stream\r\n\r\n";    
mUploadData += encryptedPostData;
mUploadData += "\r\n";
mUploadData += QString("--" + mBoundary + "\r\n").toAscii();
mUploadData += "Content-Disposition: form-data; name=\"upload\"\r\n\r\n";
mUploadData += "Uploader\r\n";
mUploadData += QString("--" + mBoundary + "--\r\n").toAscii();

QUrl serviceUrl = QUrl( "http://localhost/user_data/listen_post.php" );

QNetworkRequest request(serviceUrl);

request.setRawHeader("Content-Type","multipart/form-data; boundary=---------------------------193971182219750");

// post data to the server.
mNetworkReply = mNetworkAccessManager.post( request , mUploadData );

mDownloadedBytes.clear();


connect( mNetworkReply , SIGNAL( finished() ) , this , SLOT( httpFinished() ) );
connect( mNetworkReply , SIGNAL( readyRead() ) ,  this , SLOT( httpReadyRead() ) );
connect( mNetworkReply , SIGNAL( error( QNetworkReply::NetworkError ) ) ,  this , SLOT( printError(  QNetworkReply::NetworkError ) ) );

Вот php-код:

<?php
$file = 'test.txt';
$post_info = file_get_contents($_FILES['UserData']['tmp_name']);

file_put_contents( $file , $decrypted );

$filename = 'test2.txt';

if (file_exists($filename)) {

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    ob_clean();
    flush();
    file_put_contents( $file , filesize($filename) , FILE_APPEND );
    readfile($filename);

    exit;
}

?>

Обратите внимание, что я протестировал код загрузки php с помощью метода get QNetworkAccessManager, а также открыл страницу просто в браузере, в обоих случаях я получаю правильную загрузку, но только в случае сообщения Qt я просто ничего не получаю. Сигнал не выдается, поэтому я даже не могу сказать, произошла ли ошибка, я просто не знаю, что происходит.

Любая помощь будет действительно оценена.

С уважением Аваниндра Сингх


person Avanindra Singh    schedule 02.07.2013    source источник


Ответы (2)


Я не уверен, почему вы не получаете сообщение об ошибке. Существует оболочка для данных, состоящих из нескольких частей, которая может помочь, если проблема связана с форматированием. https://qt-project.org/doc/qt-4.8/qhttpmultipart.html

Вы проверили журналы PHP или использовали Wireshark/tcpdump, чтобы убедиться, что запрос выглядит правильно?

person nickrak    schedule 02.07.2013

Спасибо nickrak, за быстрый ответ. Я решил проблему. Похоже, я столкнулся с проблемой отсутствия сигналов из-за области действия объекта, из которого я отправлял данные на сервер. Как только я сделал его нелокальным, я начал правильно получать сигналы.

person Avanindra Singh    schedule 02.07.2013