这次介绍下文件下载的方式:分同步和异步两种。
直接上代码:
///.H文件
@interface UploadFileViewController () {
}
@property (strong, nonatomic) NSMutableData *connectionData;
@property (strong, nonatomic) NSString *fileName;
@end
//.m文件
- (void)viewDidLoad
{
self.fileName = [NSStringstringWithFormat:@"%@",@"Defualt.txt"];
}
//下载文件保存的路径 (Caches目录下)
- (NSString *)getFullFileName:(NSString *)name {
NSArray* documentPaths =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES);
NSString* documentDir = [documentPaths objectAtIndex:0];
return [documentDir stringByAppendingFormat:@"/%@", name];
}
从下载url中解析出文件名称 例如:http://192.168.01.1/test/abc.zip 就解析出abc.zip
- (void)fileNameWithUrl:(NSString *)aUrl {
NSString *reverseUrl = [NSStringstringReverse:aUrl];
NSRange reverseRange = [NSStringstringFindTheString:reverseUrl TheString:@"/"];
if (reverseRange.length >0) {
self.fileName = [NSStringstringReverse:[reverseUrl substringToIndex:reverseRange.location]];
}
}
//根据url同步下载文件
- (void)synchDown:(NSString *)aUrl {
[selffileNameWithUrl:aUrl];
NSURL *url = [NSURLURLWithString:aUrl];
NSURLRequest *request = [NSURLRequestrequestWithURL:url];
NSError *error = nil;
NSData *data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror:&error];
if (nil != data) {
if (![data writeToFile:[selfgetFullFileName:_fileName] atomically:YES]) {
NSLog(@"writeToFile failed....%@",_fileName);
}
NSLog(@" writeToFile ok ");
}
else {
NSLog(@" synchDown Failed. %@",[errordescription]);
}
}
//根据url异步下载文件
- (void)asynchDown:(NSString *)aUrl {
[selffileNameWithUrl:aUrl];
NSURL *url = [NSURLURLWithString:aUrl];
NSURLRequest *request = [NSURLRequestrequestWithURL:url];
NSURLConnection *newConnection = [[NSURLConnectionalloc] initWithRequest:request delegate:self startImmediately:YES];
}
#pragma mark - NSURLConnectionDelegate
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.connectionDataappendData:data];
}
- (void) connectionDidFinishLoading :(NSURLConnection *)connection{
if (![self.connectionDatawriteToFile:[selfgetFullFileName:_fileName] atomically:YES]) {
NSLog(@"保存失败。。。。");
}
else {
NSLog(@"保存ok。。。。");
}
}
//用到类目
//字符串反转
+ (NSString *)stringReverse:(NSString *)string {
NSMutableString *s = [NSMutableStringstring];
for (NSUInteger i = [stringlength]; i > 0; i--) {
[s appendString:[stringsubstringWithRange:NSMakeRange(i-1,1)]];
}
return s;
}
//在字符串中找出特定的字符
+ (NSRange)stringFindTheString:(NSString *)string TheString:(NSString *)theString {
NSRange range;
range = [string rangeOfString:theString];
if (range.location !=NSNotFound) {
return range;
}
return range;
}