AFN(上传、下载)

  • 下载操作(使用KV0监听进度)
 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 获得网络管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    // 要下载文件的url
    NSURL *url = [NSURL URLWithString:@"http://localhost/abc.mp4"];
    // 创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 声明一个进度对象
    NSProgress *progress = nil;

    // 异步
    [[manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        // 告诉服务器下载的文本保存的位置在那里
        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        NSLog(@"file = %@",targetPath);
        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"response = %@,filePath = %@",response,filePath);
    }] resume];

    // 使用 KVO 监听进度
    [progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:nil];
}

 - (void)dealloc {
    // 移除kvo监听
    [self removeObserver:self forKeyPath:@"name"];

}

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if([object isKindOfClass:[NSProgress class]]) {
        // 获得进度值
        NSProgress *progress = (NSProgress *)object;
        NSLog(@"下载进度----%f",progress.fractionCompleted);
        NSLog(@"localizedDescription = %@",progress.localizedDescription);
        NSLog(@"localizedAdditionalDescription = %@",progress.localizedAdditionalDescription);
    }
}
  • 上传操作(单个文件)
/** * 上传单个文件 */
 * (void)uploadFile {
    // 获得网络管理者
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager POST:@"http://localhost/post/upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        // 获得要上传文件的二进制数据
        NSData *fileData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"001.png" ofType:nil]];
        /** 参数1:文件的二进制数据 参数2:对应服务器接收文件数据的字段 参数3:保存的文件名 参数4:告诉服务器上传的文件类型 */
        [formData appendPartWithFileData:fileData name:@"userfile" fileName:@"oooo.png" mimeType:@"image/png"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"responseObject = %@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    }];
}
  • 上传多个文件
/** * 上传多个文件 */
- (void)uploadFile2 {
    // 获得网络管理者
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    // 普通参数
    NSDictionary *params = @{@"username":@"rose"};
    [manager POST:@"http://localhost/post/upload-m.php" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        // 获得要上传文件的二进制数据
        NSData *fileData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"001.png" ofType:nil]];
        /** 参数1:文件的二进制数据 参数2:对应服务器接收文件数据的字段 参数3:保存的文件名 参数4:告诉服务器上传的文件类型 */
        [formData appendPartWithFileData:fileData name:@"userfile[]" fileName:@"oooo.png" mimeType:@"image/png"];

        // 第二个文件
        // 文件url
        NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"head4.png" withExtension:nil];
        [formData appendPartWithFileURL:fileUrl name:@"userfile[]" fileName:@"111.png" mimeType:@"image/png" error:NULL];


    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"responseObject = %@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    }];
}

完成操作
注意
这里的KVO不需要我们自己手动释放。若像以前我们自己创建的KVO 一定要记得释放。

你可能感兴趣的:(网络,管理,url)