文件上传在开发中很常见,比如上传头像。苹果原生API里提供的NSURLSessionUploadTask可供我们实现文件上传。实现代码如下:
上传成功的控制台打印:
上传的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;
}