iOS原生网络请求框架之NSURLSessionUploadTask文件上传

文件上传在开发中很常见,比如上传头像。苹果原生API里提供的NSURLSessionUploadTask可供我们实现文件上传。实现代码如下:

iOS原生网络请求框架之NSURLSessionUploadTask文件上传_第1张图片
iOS原生网络请求框架之NSURLSessionUploadTask文件上传_第2张图片
iOS原生网络请求框架之NSURLSessionUploadTask文件上传_第3张图片
iOS原生网络请求框架之NSURLSessionUploadTask文件上传_第4张图片

上传成功的控制台打印:

iOS原生网络请求框架之NSURLSessionUploadTask文件上传_第5张图片

上传的data拼接格式固定,下面单独贴出来:

-(NSData *)bodyData

{

NSMutableData *data = [NSMutableData data];

//01 拼接文件参数

/*

--分隔符

Content-Disposition: form-data; name="file"; filename="Snip20161126_210.png"

Content-Type: image/png

空行

文件数据

*/

[data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

//name:file 服务器规定

//filename:该文件上传到服务器之后的名称

//username|pwd

[data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"bbbcccxxx.png\"" dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

//要上传文件的二进制数据类型  MIMEType 组成:大类型/小类型

[data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

[data appendData:KnewLine];

NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/xyf/Desktop/a.png"];

[data appendData:imageData];

[data appendData:KnewLine];

//02 拼接非文件参数

/*

--分隔符

Content-Disposition: form-data; name="username"

空行

abcdf

*/

[data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

//name:username

[data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

[data appendData:KnewLine];

[data appendData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]];

[data appendData:KnewLine];

//03 结尾标识

/*

--分隔符--

*/

[data appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];

return data;

}

你可能感兴趣的:(iOS原生网络请求框架之NSURLSessionUploadTask文件上传)