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