IOS网络请求,封装文件上传操作
2018-07-20 来源:open-open
头文件————————————————————————————— @interface JRUploadRequest : NSMutableURLRequest //初始化方法 + (JRUploadRequest *)uploadRequestWithPath:(NSString *)path; - (JRUploadRequest *)initWithPath:(NSString *)path; //开始上传 - (void)upload; //存到服务器中的文件名 @property (nonatomic, strong) NSString * fileName; //资源地址(绝对路径) @property (nonatomic, strong) NSString * sourcePath; //资源二进制数据 @property (nonatomic, strong) NSData * sourceData; @end 实现文件———————————————————————————— #define JREncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] @interface JRUploadRequest () @end )步骤:1、定义requset 2、定义请求类型 3、定义请求题 4、定义请求头 @implementation JRUploadRequest //两个初始化方法 + (JRUploadRequest *)uploadRequestWithPath:(NSString *)path { return [[self alloc] initWithPath:path]; } - (JRUploadRequest *)initWithPath:(NSString *)path { if (self = [super init]) { //设置self NSURL * url=[NSURL URLWithString:path]; self.URL = url; self.HTTPMethod = @"POST"; } return self; } //开始上传 - (void)upload { //1.定义data NSMutableData * body=[NSMutableData data]; //2.请求题 //1>拼接开始标志(服务器遇到这个标记就开始解析)("JR"要和请求头中的数据一致) [body appendData:JREncode(@"--JR\r\n")]; //2>设置服务器接受参数和文件名称( NSString * filename = [NSString stringWithFormat:@"Content-Disposition: form-data;name=\"file\";filename=\"%@\" \r\n", self.fileName]; [body appendData:JREncode(filename)]; //3>拼接上传的文件类型 NSString * mimeType= [self getMimeType: self.sourcePath]; NSLog(@"======%@",mimeType); NSString * contentType=[NSString stringWithFormat:@"Content-Type: %@\r\n",mimeType]; [body appendData:JREncode(contentType)]; //4>拼接换行 [body appendData:JREncode(@"\r\n")]; //5>拼接数据 [body appendData:self.sourceData]; //6>拼接换行 [body appendData:JREncode(@"\r\n")]; //7>拼接结束标志 [body appendData:JREncode(@"--JR--\r\n")]; //8>设置请求体 self.HTTPBody=body; //3.请求头 //1> 设置文件的长度 [self setValue:[NSString stringWithFormat:@"%ld",body.length] forHTTPHeaderField:@"Content-Length"]; //2> 设置类型和开始标志 [self setValue:@"multipart/form-data; boundary=JR" forHTTPHeaderField:@"Content-Type"]; //上传 [NSURLConnection sendAsynchronousRequest:self queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSString * str=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"========%@",str); }]; } #pragma mark - 获取mimeType - (NSString * ) getMimeType:(NSString *) path{ //获取本地的URL NSURL * url=[NSURL fileURLWithPath:path];//不要使用URLWithString这个方法 NSURLRequest * request=[NSURLRequest requestWithURL:url]; NSURLResponse * response=nil; //不能使用异步方法,因为如果是异步的,返回的字符串是空 [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; return response.MIMEType; } @end
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:iOS网络get请求
下一篇:iOS网络post请求
最新资讯
热门推荐