Не получено ответа от метода записи 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 я просто ничего не получаю. Сигнал не излучается, поэтому я даже не могу сказать, произошла ли ошибка, я просто не понимаю, что происходит.

Любая помощь будет принята с благодарностью.

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

2 ответа

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

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

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

Другие вопросы по тегам