1

QNetworkReply我可以使用, QNetworkAccessManager,QNetworkRequest等将Qt 中的文件发布到服务器。该服务器转换文件并将其返回。我如何得到那个吐回的文件?我是否需要以某种方式找到从标头返回的文件的 url,然后QNetworkAccessManager对其发出获取请求?或者我可以以某种方式从现有QNetworkReply信号中获取它并将其写入文件吗?

4

1 回答 1

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信号连接QNetworkAccessManager到插槽并在那里写入文件来以异步方式执行此操作:

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();
   }
}
于 2014-08-04T05:21:35.163 回答