Ios-图片以File(文件)格式Post上传

下面的截图,就是Img以file文件类型上传:


1.AFNetworking最新,3.0中也有封装好的方法,不过暂时没弄出来,项目做完在总结。

2.就是用系统自带就行处理.

下面是封装好的,绝对可用,只需要改变参数就可以了

下面加粗,斜线的地方,就是你参数名,需要修改的地方


+ (void)uploadImg:(UIImage *)image

urlString:(NSString *)urlString

parameters:(NSDictionary *)parameters

callBack:(RequestCallback)callBack {

//分界线的标识符

NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";

//根据url初始化request

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]

cachePolicy:NSURLRequestReloadIgnoringLocalCacheData

timeoutInterval:30];

//分界线 --AaB03x

NSString *MPboundary=[[NSString alloc] initWithFormat:@"--%@", TWITTERFON_FORM_BOUNDARY];

//结束符 AaB03x--

NSString *endMPboundary=[[NSString alloc] initWithFormat:@"%@--", MPboundary];

//得到图片的data

// 压缩图片

NSData *imageData = nil;

CGFloat compression = 1.0;

do {

imageData = UIImageJPEGRepresentation(image, compression);

compression -= 0.1;

} while (imageData.length / 1024.0 > 300);

//http body的字符串

NSMutableString *body = [[NSMutableString alloc] init];

//参数的集合的所有key的集合

for (NSString *key in [parameters allKeys]) {

//添加分界线,换行

[body appendFormat:@"%@\r\n",MPboundary];

//添加字段名称,换2行

[body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];

//添加字段的值

[body appendFormat:@"%@\r\n",[parameters objectForKey:key]];

}

////添加分界线,换行

[body appendFormat:@"%@\r\n",MPboundary];

//声明pic字段,文件名为boris.png

[body appendFormat:@"Content-Disposition: form-data; name=\"headPortrait\"; filename=\"headPortrait.png\"\r\n"];

//声明上传文件的格式

[body appendFormat:@"Content-Type: image/png\r\n\r\n"];

//声明结束符:--AaB03x--

NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];

//声明myRequestData,用来放入http body

NSMutableData *myRequestData=[NSMutableData data];

//将body字符串转化为UTF8格式的二进制

[myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];

//将image的data加入

[myRequestData appendData:imageData];

//加入结束符--AaB03x--

[myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];

//设置HTTPHeader中Content-Type的值

NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];

//设置HTTPHeader

[request setValue:content forHTTPHeaderField:@"Content-Type"];

//设置Content-Length

[request setValue:[NSString stringWithFormat:@"%ld", (long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];

//设置http body

[request setHTTPBody:myRequestData];

//http method

[request setHTTPMethod:@"POST"];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:request

queue:queue

completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

dispatch_sync(dispatch_get_main_queue(), ^{

// 请求失败,返回错误对象

if (connectionError) {

if (callBack) {

callBack(RequestFailed, connectionError);

} else {

NSLog(@"Request failed with reason '%@'", [connectionError localizedDescription]);

}

return;

}

id object = [TYTools JSONObjectWithData:data];

// 请求成功,解析成功,返回json对象

if (object) {

if (callBack) {

callBack(RequestSuccess, object);

}

}

// 请求成功,解析失败,返回反馈字符串

else {

if (callBack) {

callBack(RequestException, object);

NSLog(@"数据异常:%@", object);

}

}

});

}];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自:IOS上传图片方法类 - 天纯蓝 - 博客园 iPhone开发中遇到上传图片问题,找到多资料,最终封装了一个...
    斌小狼阅读 4,711评论 0 2
  • (NSMutableURLRequest *)PostImageRequest:(NSString )URLStr...
    seventhboy阅读 2,256评论 0 0
  • 由于iOS无法通过html表单来上传图片,因此想要上传图片,必须实现http请求,而不能像其他语言那样通过html...
    山杨阅读 6,850评论 1 6
  • 需要上传图片,语音等文件到服务器。通常把要上传的数据保存在请求体中。由于没使用第三方,变用表单上传文件满足需求。N...
    3a169b0787bc阅读 2,849评论 0 0
  • +(NSString *)PostImagesToServer:(NSString *) strUrl dicPo...
    Daimer阅读 3,471评论 0 2

友情链接更多精彩内容