post请求上传数据的时候,总是记不住拼接方法,记录如下:
#define boundary @"AaB03x" //设置边界 参数可以随便设置
#define fileParam @"file"
- (void)uploadImage:(UIImage *)image
{
NSString *urlStr = @"";
NSURL *url=[NSURL URLWithString:urlStr];
//2.创建request请求
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
//(1)请求模式(默认是GET)
[request setHTTPMethod:@"POST"];
//(2)超时时间
//[request setTimeoutInterval:120];
//(3)缓存策略
//[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
//(4)请求头
//以下代码是关键
//upload task不会在请求头里添加content-type(上传数据类型)字段
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;charset=utf-8;boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
//(5)设置请求体
//本地图片
NSData *bodyData=UIImageJPEGRepresentation(image, 0.1);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置时间格式(主要是为了命名文件)
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.jpeg", str];
NSMutableData *body = [NSMutableData data];
//(注意上面宏定义的请求体边界下面就要用上了)
//如果需要同时上传多个文件,用这段代码循环拼接所有bodyData
if (bodyData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", fileParam, fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:bodyData];
}
//加上尾部,如果需要同时上传多个文件,循环拼接所有bodyData后再加上尾部
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//3.创建网络会话
NSURLSession *session=[NSURLSession sharedSession];
//4.创建网络上传任务
NSURLSessionUploadTask *dataTask=[session uploadTaskWithRequest:request fromData:body completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; NSLog(@"dadada===%@",dict);
//处理返回值
}
if (error) {
//处理错误
};
}];
//5.发送网络任务
[dataTask resume];
}
除了图片以外,其他类型文件也可以按照此方法上传,但是需要注意文件名的后缀。
参考:http://blog.youkuaiyun.com/yang__xz/article/details/50924017