AFN 上传图片

#pragma mark - Reachability Management (iOS 6-7)

 //网络监听(用于检测网络是否可以链接。此方法最好放于AppDelegate中,可以使程序打开便开始检测网络)

- (void)reachabilityManager

{

    //打开网络监听

    [manager.reachabilityManager startMonitoring];

    

    //监听网络变化

    [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        switch (status) {

                

            //当网络不可用(无网络或请求延时)

            case AFNetworkReachabilityStatusNotReachable:

                break;

                

            //当为手机蜂窝数据网和WiFi

            case AFNetworkReachabilityStatusReachableViaWiFi:

            case AFNetworkReachabilityStatusReachableViaWWAN:

                break;                

            //其它情况

            default:

                break;

        }

    }];

    //停止网络监听(若需要一直检测网络状态,可以不停止,使其一直运行)

    [manager.reachabilityManager stopMonitoring];

}

 #pragma mark - GET Request (iOS 6-7)

//GET请求

- (void)methodGet

{

    //致空请求

    if (manager) {

        manager = nil;

    }

     //创建请求

    manager = [AFHTTPRequestOperationManager manager];

    

    //设置请求的解析器为AFHTTPResponseSerializer(用于直接解析数据NSData),默认为AFJSONResponseSerializer(用于解析JSON

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    

    //发送GET请求

    [manager GET:@"接口地址" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        

        //请求成功(当解析器为AFJSONResponseSerializer时)

        NSLog(@"Success: %@", responseObject);

        //请求成功(当解析器为AFHTTPResponseSerializer时)

//        NSString *JSONString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

//        NSLog(@"success:%@", JSONString);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        //请求失败

        NSLog(@"Error: %@", error);

    }];

}

#pragma mark - POST Request (iOS 6-7)

//POST请求

- (void)methodPost

{

    //致空请求

    if (manager) {

        manager = nil;

    }

    //添加参数

    NSDictionary *parameters = @{@"Key": @"Object",

                                 @"Key": @"Object"};

    //创建请求

    manager = [AFHTTPRequestOperationManager manager];

    

    //设置请求的解析器为AFHTTPResponseSerializer(用于直接解析数据NSData),默认为AFJSONResponseSerializer(用于解析JSON

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //发送POST请求

    [manager POST:@"接口地址" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

        //请求成功(当解析器为AFJSONResponseSerializer时)

        NSLog(@"Success: %@", responseObject);

        //请求成功(当解析器为AFHTTPResponseSerializer时)

//        NSString *JSONString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

//        NSLog(@"success:%@", JSONString);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        //请求失败

        NSLog(@"Error: %@", error);

    }];

}

 

#pragma mark - Upload Request (iOS 6-7)

//上传(以表单方式上传,以图片为例)

- (void)methodUpload

{

    //致空请求

    if (manager) {

        manager = nil;

    }

    //        http://192.168.1.111/HEHEHEHE/user/loadFiles?file=ABCD&uid=EFGH;

    //添加参数

    NSDictionary *parameters = @{@"uid": @"EFGH"};//对应上面接口非图片的参数 file是图片的key

    //创建请求

    manager = [AFHTTPRequestOperationManager manager];

    //设置请求的解析器为AFHTTPResponseSerializer(用于直接解析数据NSData),默认为AFJSONResponseSerializer(用于解析JSON

//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //发送POST请求,添加需要发送的文件,此处为图片

    [manager POST:@"接口地址" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        //添加图片,并对其进行压缩(0.0为最大压缩率,1.0为最小压缩率)

//        UIImagePNGRepresentation(<#UIImage *image#>)

        NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"图片名字(注意后缀名)"], 1.0);

        //添加要上传的文件,此处为图片

        [formData appendPartWithFileData:imageData name:@"file(看上面接口,服务器放图片的参数名Key)" fileName:@"图片名字(随便写一个,(注意后缀名)如果是UIImagePNGRepresentation写XXXX.png,如果是UIImageJPEGRepresentation写XXXX.jpeg)" mimeType:@"文件类型(此处为图片格式,如image/jpeg,对应前面的PNG/JPEG)"];

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {

        //请求成功(当解析器为AFJSONResponseSerializer时)

        NSLog(@"Success: %@", responseObject);

        //请求成功(当解析器为AFHTTPResponseSerializer时)

//        NSString *JSONString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

//        NSLog(@"success:%@", JSONString);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        //请求失败

        NSLog(@"Error: %@", error);

    }];

}

#pragma mark - Download Request (iOS 6-7)

 //下载

- (void)methodDownload

{

    //下载进度条

    UIProgressView  *downProgressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];

    downProgressView.center = CGPointMake(self.view.center.x, 220);

    downProgressView.progress = 0;

    downProgressView.progressTintColor = [UIColor blueColor];

    downProgressView.trackTintColor = [UIColor grayColor];

    [self.view addSubview:downProgressView]; 

    //设置存放文件的位置(此Demo把文件保存在iPhone沙盒中的Documents文件夹中。关于如何获取文件路径,请自行搜索相关资料)

    //方法一

//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

//    NSString *cachesDirectory = [paths objectAtIndex:0];

//    NSString *filePath = [cachesDirectory stringByAppendingPathComponent:@"文件名"];

    //方法二

    NSString *filePath = [NSString stringWithFormat:@"%@/Documents/文件名(注意后缀名)", NSHomeDirectory()];

    

    //打印文件保存的路径

    NSLog(@"%@",filePath);

    

    //创建请求管理

    operation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"下载地址"]]];

    

    //添加下载请求(获取服务器的输出流)

    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];

    

    //设置下载进度条

    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

        

        //显示下载进度

        CGFloat progress = ((float)totalBytesRead) / totalBytesExpectedToRead;

        [downProgressView setProgress:progress animated:YES];

    }];

    

    //请求管理判断请求结果

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {        //请求成功

        NSLog(@"Finish and Download to: %@", filePath);

        

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        

        //请求失败

        NSLog(@"Error: %@",error);

    }];

#pragma mark - Download Management (iOS 6-7)

//开始下载(断点续传)

- (void)downloadStart

{

    [self methodDownload];

    [operation start];

}

//暂停下载(断点续传)

- (void)downloadPause

{

    [operation pause];

}

 //继续下载(断点续传)

- (void)downloadResume

{

    [operation resume];

}

#pragma mark - Upload Request (iOS 7 only)

//上传(iOS7专用)

- (void)methodUploadFor7

{

    //致空请求

    if (sessionManager) {

        sessionManager = nil;

    }

    //创建请求(iOS7专用)

    sessionManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    //添加请求接口

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"上传地址"]];

    //添加上传的文件

    NSURL *filePath = [NSURL fileURLWithPath:@"本地文件地址"];

    //发送上传请求

    NSURLSessionUploadTask *uploadTask = [sessionManager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {

        if (error) {

            //请求失败

            NSLog(@"Error: %@", error);

        } else {

             //请求成功

            NSLog(@"Success: %@ %@", response, responseObject);

        }

    }];

    //开始上传

    [uploadTask resume];

}

 #pragma mark - Download Request (iOS 7 only)

//下载(iOS7专用)

- (void)methodDownloadFor7

{

    //致空请求

    if (sessionManager) {

        sessionManager = nil;

    }

    //创建请求(iOS7专用)

    sessionManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    

    //添加请求接口

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"下载地址"]];

    //发送下载请求

    NSURLSessionDownloadTask *downloadTask = [sessionManager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {        //设置存放文件的位置(此Demo把文件保存在iPhone沙盒中的Documents文件夹中。关于如何获取文件路径,请自行搜索相关资料)

        NSURL *filePath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];

        return [filePath URLByAppendingPathComponent:[response suggestedFilename]];

    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

        //下载完成

        NSLog(@"Finish and Download to: %@", filePath);

    }];

    //开始下载

    [downloadTask resume];

}

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。