iOS的info.plist文件配置
一.使用DataTask上傳
#import "ViewController.h"
#define kBoundary @"AaB03x"
#define kNext @"\r\n"
#define kStart @"--AaB03x"
#define kEnd @"--AaB03x--"
#define DataFromString(str) ([str dataUsingEncoding:NSUTF8StringEncoding])
@interface ViewController ()<NSURLSessionDataDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1.創(chuàng)建url
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/upLoadFile.php"];
//2.創(chuàng)建可變的request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
[request setValue:@"multipart/form-data,boundary=AaB03x" forHTTPHeaderField:@"Content-type"];
//3.創(chuàng)建可變的body
NSMutableData *bodyData = [NSMutableData data];
#pragma mark -------開始拼接 ---------
//1.請求體的開始 --AaB03x
[bodyData appendData:DataFromString(kStart)];
//2.換行
[bodyData appendData:DataFromString(kNext)];
//3.設(shè)置數(shù)據(jù)對應(yīng)的字段
[bodyData appendData:DataFromString(@"content-disposition:form-data;name= \"file\";filename=\"def.png\"")];
//4.換行
[bodyData appendData:DataFromString(kNext)];
//5.設(shè)置文件的類型image/png image/jpeg video/mp4
[bodyData appendData:DataFromString(@"content-Type:image/png")];
//6.換行
[bodyData appendData:DataFromString(kNext)];
//7.換行 真正的數(shù)據(jù)開始
[bodyData appendData:DataFromString(kNext)];
//獲取圖片的二進(jìn)制數(shù)據(jù)
NSData *imgData = UIImagePNGRepresentation([UIImage imageNamed:@"bz"]);
//8.設(shè)置數(shù)據(jù)
[bodyData appendData:imgData];
//9.換行 設(shè)置數(shù)據(jù)完畢
[bodyData appendData:DataFromString(kNext)];
//10.請求體的結(jié)束 --AaB03x
[bodyData appendData:DataFromString(kEnd)];
//11.換行
[bodyData appendData:DataFromString(kNext)];
#pragma mark -------拼接結(jié)束 ---------
//4.設(shè)置請求體
request.HTTPBody = bodyData;
//5.創(chuàng)建session
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
// 5.創(chuàng)建task
NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
// 6.開啟任務(wù)
[task resume];
}
#pragma mark -------代理方法 ---------
//上傳的信息
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend{
NSLog(@"%f",totalBytesSent*1.0/totalBytesExpectedToSend);
}
//上傳完畢
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
NSLog(@"%@",error.userInfo);
}
@end
二.使用UploadTask上傳
2.1.步驟:
2.2.代碼例子:
#import "ViewController.h"
#define kBoundary @"AaB03x"
#define kNext @"\r\n"
#define kStart @"--AaB03x"
#define kEnd @"--AaB03x--"
#define DataFromString(str) ([str dataUsingEncoding:NSUTF8StringEncoding])
@interface ViewController ()<NSURLSessionDataDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1.創(chuàng)建url
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/AF_UpLoadFile.php"];
//2.創(chuàng)建可變的request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
[request setValue:@"multipart/form-data,boundary=AaB03x" forHTTPHeaderField:@"Content-type"];
//3.創(chuàng)建可變的body
NSMutableData *bodyData = [NSMutableData data];
#pragma mark -------開始拼接 ---------
//1.請求體的開始 --AaB03x
[bodyData appendData:DataFromString(kStart)];
//2.換行
[bodyData appendData:DataFromString(kNext)];
//3.設(shè)置數(shù)據(jù)對應(yīng)的字段
[bodyData appendData:DataFromString(@"content-disposition:form-data;name= \"file\";filename=\"abc.png\"")];
//4.換行
[bodyData appendData:DataFromString(kNext)];
//5.設(shè)置文件的類型image/png image/jpeg video/mp4
[bodyData appendData:DataFromString(@"content-Type:image/png")];
//6.換行
[bodyData appendData:DataFromString(kNext)];
//7.換行 真正的數(shù)據(jù)開始
[bodyData appendData:DataFromString(kNext)];
//獲取圖片的二進(jìn)制數(shù)據(jù)
NSData *imgData = UIImagePNGRepresentation([UIImage imageNamed:@"def"]);
//8.設(shè)置數(shù)據(jù)
[bodyData appendData:imgData];
//9.換行 設(shè)置數(shù)據(jù)完畢
[bodyData appendData:DataFromString(kNext)];
//10.請求體的結(jié)束 --AaB03x
[bodyData appendData:DataFromString(kEnd)];
//11.換行
[bodyData appendData:DataFromString(kNext)];
#pragma mark -------拼接結(jié)束 ---------
//4.設(shè)置請求體
request.HTTPBody = bodyData;
//5、創(chuàng)建NSURLSession
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//6、創(chuàng)建上傳任務(wù) 上傳的數(shù)據(jù)來自getData方法
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:bodyData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"響應(yīng)信息:%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
}];
//7、執(zhí)行上傳任務(wù)
[task resume];
}
#pragma mark - 代理方法 只要給服務(wù)器上傳數(shù)據(jù)就會調(diào)用 可以計算出上傳進(jìn)度
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend{
NSLog(@"%f",totalBytesSent*1.0/totalBytesExpectedToSend);
}
@end
參考文章
http://www.itdecent.cn/p/f0a9c47167fd
https://blog.csdn.net/majiakun1/article/details/38133789
demo鏈接
鏈接:https://pan.baidu.com/s/1oUxNWJhaj69228XVGmtPWA 密碼:rafj
鏈接:https://pan.baidu.com/s/15ONw7XccbEkVnwLhAItkww 密碼:6ssf

