使用QNetworkReply,我如何发布文件,然后从服务器接收转换后的文件

With QNetworkReply how can I post a file and then receive a converted file back from the server?

本文关键字:文件 服务器 转换 然后 QNetworkReply 何发布 使用      更新时间:2023-10-16

我可以使用QNetworkReply, QNetworkAccessManager, QNetworkRequest等在Qt中发布文件到服务器。该服务器转换文件并将其返回。我怎么才能拿到那份吐出来的文件?我是否需要以某种方式找到从头返回的文件的url,然后让QNetworkAccessManager为它发出get请求?或者我可以以某种方式从现有的QNetworkReply信号中获得它并将其写入文件?

如果服务器在响应请求时返回文件,那么您可以直接从返回的应答中读取该文件:

QNetworkAccessManager nam;
QUrl url(QString("http://www.example.com"));
url.addQueryItem("parameter", "value");
QNetworkRequest request(url);
QNetworkReply *reply = nam.get(request);
QEventLoop eventloop;
connect(reply,SIGNAL(finished()),&eventloop,SLOT(quit()));
eventloop.exec();
if (reply->error() == QNetworkReply::NoError)
{
    QByteArray bts = reply->readAll();
    QFile file("path/to/file");
    file.open(QIODevice::WriteOnly);
    file.write(bts);
    file.close();
}

您也可以通过异步方式将QNetworkAccessManagerfinished信号连接到插槽并在那里写入文件:

connect(&nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));
void onFinished(QNetworkReply* reply)
{
   if (reply->error() == QNetworkReply::NoError)
   {
       QByteArray bts = reply->readAll();
       QFile file("path/to/file");
       file.open(QIODevice::WriteOnly);
       file.write(bts);
       file.close();
   }
}