4
如何在Qt中以並行方式下載大文件。這樣文件下載時間就減少了。如何在Qt中快速下載大文件
如何在Qt中以並行方式下載大文件。這樣文件下載時間就減少了。如何在Qt中快速下載大文件
假設你正在使用QNetwork和下載內容是一個HTTP GET,你需要做到以下幾點:
Content-Length
),並檢查服務器支持範圍請求(在GET Accept-Ranges
)Range
頭要通過設置HttpPipeliningAllowedAttribute
屬性上啓用請求HTTP管道:
QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
設置範圍標題:
req.setRawHeader("Range", "bytes=0-499");
我嘗試使用下面的代碼,但沒有運氣,找出文件大小。請讓我知道它有什麼問題。 QNetworkAccessManager * mngr = new QNetworkAccessManager(); \t QNetworkRequest rqst(url); QNetworkReply * rply = mngr-> head(rqst); \t int length = rply-> header(QNetworkRequest :: ContentLengthHeader).toInt(); – user1111 2012-04-23 09:12:04
請求是非阻塞的,您需要先等待QNetworkAccessManager :: finished或QNetworkReply :: finished(或GETNet的QNetworkReply :: metaDataChanged)信號,然後才能訪問HTTP標頭。請閱讀[QNetworkAccessManager的文檔](http://qt-project.org/doc/qt-4.8/qnetworkaccessmanager.html#details)或看看這個[教程](http://www.developer.nokia)的.com /社區/維基/ Creating_an_HTTP_network_request_in_Qt_using_QNetworkAccessManager,_QNetworkRequest,_QNetworkReply)。 – 2012-04-23 09:24:57
當我指定一個錯誤的URL(例如:「http://10.70.22.200:8080/Install_T.msi」而不是「http://10.70.22.200:8080/Install_Test.msi」)時,標題大小顯示了一些值(在本例中爲990){size = replyy-> header(QNetworkRequest :: ContentLengthHeader).toLongLong();}當我指定錯誤的URL時,由於該文件不存在,我預期該標題爲零。因此,在繼續進行文件下載之前,我無法驗證文件是否存在。 – user1111 2012-04-23 10:50:43