iOS- 利用AFNetworking3.0+(最新AFN) - 實現文件上傳


官方建議AFN的使用方法

0.導入框架準備工做  

•1. 將AFNetworking3.0+框架程序拖拽進項目
 
•2. 或使用Cocopod 導入AFNetworking3.0+
 
•3.  引入
#import "AFNetworking.h"
 

1.UI準備工做  

//.h文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
//上傳進度條
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;

@end

 

2.利用AFN實現文件上傳操做細節  

- (void)uploadImage{
        /*
            此段代碼若是須要修改,能夠調整的位置
            1. 把upload.php改爲網站開發人員告知的地址
            2. 把file改爲網站開發人員告知的字段名
        */
    
    //AFN3.0+基於封住HTPPSession的句柄
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    NSDictionary *dict = @{@"username":@"Saup"};
    
    //formData: 專門用於拼接須要上傳的數據,在此位置生成一個要上傳的數據體
    [manager POST:@"http://192.168.1.111:12345/upload.php" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        UIImage *image =[UIImage imageNamed:@"moon"];
        NSData *data = UIImagePNGRepresentation(image);

        
        // 在網絡開發中,上傳文件時,是文件不容許被覆蓋,文件重名
        // 要解決此問題,
        // 能夠在上傳時使用當前的系統事件做爲文件名
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        // 設置時間格式
        formatter.dateFormat = @"yyyyMMddHHmmss";
        NSString *str = [formatter stringFromDate:[NSDate date]];
        NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
        
        //上傳
         /*
         此方法參數
             1. 要上傳的[二進制數據]
             2. 對應網站上[upload.php中]處理文件的[字段"file"]
             3. 要保存在服務器上的[文件名]
             4. 上傳文件的[mimeType]
        */
        [formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"image/png"];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        //上傳進度
        // @property int64_t totalUnitCount;     須要下載文件的總大小
        // @property int64_t completedUnitCount; 當前已經下載的大小
        //
        // 給Progress添加監聽 KVO
        NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
        // 回到主隊列刷新UI,用戶自定義的進度條
        dispatch_async(dispatch_get_main_queue(), ^{
            self.progressView.progress = 1.0 *
            uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
        });
 
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"上傳成功 %@", responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        NSLog(@"上傳失敗 %@", error);
    }];
    
}

 4.檢測網絡狀態--優化用戶體驗   

- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    //網絡監控句柄
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
    //要監控網絡鏈接狀態,必需要先調用單例的startMonitoring方法
    [manager startMonitoring];
    
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        //status:
        //AFNetworkReachabilityStatusUnknown          = -1,  未知
        //AFNetworkReachabilityStatusNotReachable     = 0,   未鏈接
        //AFNetworkReachabilityStatusReachableViaWWAN = 1,   3G
        //AFNetworkReachabilityStatusReachableViaWiFi = 2,   無線鏈接
        NSLog(@"%d", status);
    }];
}

 

· AFNetworking3.0如下的版本使用方法能夠看我老版本的日誌:php

iOS- 利用AFNetworking(AFN) - 實現文件上傳

 

做者: 清澈Sauphtml

出處: http://www.cnblogs.com/qingche/服務器

本文版權歸做者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。網絡

相關文章
相關標籤/搜索