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

时间:2014-08-04 04:34:37

标签: c++ qt qnetworkaccessmanager qnetworkreply

我可以使用QNetworkReplyQNetworkAccessManagerQNetworkRequest等在Qt中将文件发布到服务器。此服务器转换文件并将其吐回。我如何获得该后备文件?我是否需要以某种方式找到从标题中返回的文件的URL,然后让QNetworkAccessManager向它发出get请求?或者我可以以某种方式从现有的QNetworkReply信号中获取它并将其写入文件?

1 个答案:

答案 0 :(得分:2)

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

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

您也可以通过将finished的{​​{1}}信号连接到插槽并在那里写入文件,以异步方式执行此操作:

QNetworkAccessManager