你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 原生API文件上傳之斷點續傳思路

原生API文件上傳之斷點續傳思路

編輯:關於IOS

NSURL *url = [NSURL URLWithString:@"http://www.51ios.net/321.zip"];
//要判斷網絡服務器上文件的大小,可以使用Http的HEAD方法
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//使用HEAD方法,僅獲取目標文件的信息,而不做實際的下載工作。
//[request setHTTPMethod:@"HEAD"];
/**
設置斷點續傳的思路:
HeaderField:頭域(請求頭部的字段)
可以通過指定range的范圍逐步地下載指定范圍內的數據,待下載完成後,再將這些數據拼接成一個文件。

1根據HEAD方法獲取到要下載的文件的總大小、
2在磁盤上建立一個臨時的緩沖文件,該文件的大小與目標文件大小一致
3緩沖文件中所有字節都是默認為0
4開啟多線程,分別加載不同的range頭指定的數據塊,待數據塊加載完成以後,將其分別寫入對應的偏移地址。
5所有數據下載完成以後,表示文件下載完成,將臨時文件名更改為目標文件。

開發的難點:
0 在寫入文件之前,首先要建立一個同等大小的文件。
1 文件的讀寫問題,在oc裡默認是覆蓋,追加,如果要指定位置,需要用seek方法,移動文件指針。
2在多線程寫入文件時,文件的鎖定操作是一個問題。
*/
[request setValue:@"bytes=0-499" forKeyPath:@"range"];//表示只讀取數據的第0個字節到第499個字節。

//3NSURLConnection
//如果要獲取文件長度,可以在Response中獲取到
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
//在response的expectedcontentlength屬性中,可以獲知要卸載的文件的文件長度。
NSLog(@"%lld %d%@", [response expectedContentLength], data.length, data);

iOS大神博客對斷點續傳的總結

1,iOS要使用NSURLConnection實現斷點續傳

2需要自定義NSURLRequest頭部的range屬性,通知NSURLConnection去獲取部分網絡內容

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved