2012-04-18 42 views

回答

13

假設你正在使用QNetwork和下載內容是一個HTTP GET,你需要做到以下幾點:

  1. 使用HEAD請求來獲取文件大小(Content-Length),並檢查服務器支持範圍請求(在GET Accept-Ranges
  2. Enable pipelining請求
  3. 設置基於內容的大小Range

要通過設置HttpPipeliningAllowedAttribute屬性上啓用請求HTTP管道:

QNetworkRequest req(url); 
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); 

設置範圍標題:

req.setRawHeader("Range", "bytes=0-499"); 
+0

我嘗試使用下面的代碼,但沒有運氣,找出文件大小。請讓我知道它有什麼問題。 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

+0

請求是非阻塞的,您需要先等待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

+0

當我指定一個錯誤的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