簡體   English   中英

使用QNetworkReply如何發布文件,然后從服務器接收轉換后的文件?

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

我可以使用QNetworkReplyQNetworkAccessManagerQNetworkRequest等在Qt中將文件發布到服務器。 該服務器轉換文件並將其吐回。 如何獲得隨身攜帶的文件? 我是否需要以某種方式找到從標頭返回的文件的url,然后讓QNetworkAccessManager進行獲取請求? 還是我可以從現有的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();
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM