bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

iOS如何實現文件下載-創新互聯

這篇文章給大家分享的是有關iOS如何實現文件下載的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊網站空間、營銷軟件、網站建設、淮安網站維護、網站推廣。
  • 原生態的分段下載的基本原理

文件下載往往需要比較長的一段時間,實現分段下載是實現斷點下載的前提

實現分段下載需要解決以下兩個問題

    問題1:下載前,需要知道文件的長度

    問題2:每一次請求下載文件的一段

  • 針對問題1:HEAD請求獲取文件長度

HEAD請求只獲取響報文,而不獲取資源的實際數據

     通常用來獲取文件長度、檢測服務器端資源是否發生變化

響應對象NSURLResponse的屬性exceptedContentLength即表示文件的長度


   iOS如何實現文件下載

  • 針對問題2:請求頭參數Range進行分段下載

HTTP協議規定,請求頭中的Range參數用于請求一段數據

如:

   bytes=0-499            從0到499的頭500個字節

     bytes=500-999          從500到999的第二個500字節

     bytes=500-             從500字節以后的所有字節

     bytes=-500               最后500個字節

     bytes=500-599,800-899  同時指定幾個范圍

也就是說,分段下載,就是發送多次多次請求,每次請求設置Range字段

下面的代碼,完成一個文件的分段下載:

   iOS如何實現文件下載

下面的代碼,完成文件的一段下載:

   iOS如何實現文件下載

使用異步下載時,應使用代理、通知、block進行下載后的處理動作。

  • NSURLSession的下載任務

下載任務的創建:

- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL*)url
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL*)url completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL*location, NSURLResponse *response, NSError*error))completionHandler

NSURLSession執行下載任務相關的代理方法:

// 周期性的調用,參數描述了下載的進度
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask*)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
// 下載完成時調用
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask*)downloadTask didFinishDownloadingToURL:(NSURL *)location

示例說明:

1)創建NSURLSession對象并指定代理

    iOS如何實現文件下載

2)創建下載任務并啟動

    iOS如何實現文件下載

3)實現下載完成的代理方法:應將下載完成后的文件移動到指定目錄并重命名


    iOS如何實現文件下載

4)實現下載進度監聽的代理方法:


    iOS如何實現文件下載

  • 下載暫停/繼續的實現

NSURLSessionDownloadTask的暫停方法:

- (void)cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler

   參數resumeData:描述斷點信息

NSURLSession通過斷點信息創建下載任務:

- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeDatacompletionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError*error))completionHandler

相關代理方法:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask*)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes

實例說明:

1)下載暫停

    iOS如何實現文件下載

2)下載繼續

    iOS如何實現文件下載

3)斷點繼續下載的代理方法

    iOS如何實現文件下載

  • 使用AFNetworking下載


使用AFNetworking進行下載,本質上還是創建NSURLSessionDownloadTask對象

   只是將代理方法的封裝到AFURLSession對象中,并用block指定行為

AFURLSessionManager創建下載任務

// 根據請求對象創建下載任務
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(NSProgress *__nullable __autoreleasing *__nullable)progress destination:(nullable NSURL *( ^ ) ( NSURL *targetPath , NSURLResponse *response ))destination completionHandler:(nullable void ( ^ ) ( NSURLResponse *response , NSURL *filePath , NSError *error ))completionHandler
// 根據斷點信息創建愛下載任務
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData progress:(NSProgress *__nullable __autoreleasing *__nullable)progress destination:(nullable NSURL *( ^ ) ( NSURL *targetPath , NSURLResponse *response ))destination completionHandler:(nullable void ( ^ ) ( NSURLResponse *response , NSURL *filePath , NSError *error ))completionHandler

   參數destination:該block用于指定獲取文件下載后的路徑

   參數completionHandler:該block在下載任務完成時執行

          包括任務被暫停時(cancelByProducingResumeData)

   出參progress:非NULL時,會返回一個NSProgress對象,描述下載進度

示例說明:

1)創建NSURLSession對象并指定代理

    iOS如何實現文件下載

2)下載完成的block封裝1:應返回下載完成的文件的最終存儲URL

    iOS如何實現文件下載

3)任務完成block封裝:包括錯誤情況下的處理、成功請求下的提示等

    iOS如何實現文件下載

4)下載任務的創建啟動/繼續

    iOS如何實現文件下載

5)下載任務的暫停

    iOS如何實現文件下載

  • 使用NSProgress監聽下載進度

在上面的代碼中,有一個參數NSProgress類型,傳的是NULL,這個參數是AFN框架用于監聽下載進度

NSProgress在iOS7.0引入,使用觀察者模式

     其fractionCompleted屬性值變化時,通知其所有的觀察者

示例說明:

1)下載任務的創建啟動/繼續

    iOS如何實現文件下載

2)KVO的響應方法

    iOS如何實現文件下載

    其中self.progressView是一個自定義的用于顯示下載進度的視圖對象



  • 下載任務常遇狀況


狀況一:程序退出時,如何保存下載狀態

   下載任務管理類,注冊成為以下UIApplication對象通知的響應者

      UIApplicationDidEnterBackgroundNotification

      UIApplicationWillTerminateNotification

   響應方法實現:將所有的下載任務暫停,并將斷點信息保存到本地的操作

   響應下面通知,從本地讀出斷點信息的操作

      UIApplicationWillEnterForegroundNotification

   或在下載任務管理對象被創建時,從本地讀出斷點信息的操作

狀況二:從斷點繼續下載時,如果服務器上的文件發生變化或被刪除,應如何處理?

   可以在從斷點繼續下載前,先發送一次HEAD請求,判斷文件是否存在,以及該文件的長度是否發生變化等操作。

感謝各位的閱讀!關于“iOS如何實現文件下載”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享文章:iOS如何實現文件下載-創新互聯
文章來源:http://vcdvsql.cn/article32/ddggsc.html

成都網站建設公司_創新互聯,為您提供移動網站建設面包屑導航服務器托管外貿建站電子商務網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司