首页 / IOS / iOS post上传图片
iOS post上传图片
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS post上传图片,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4160字,纯文字阅读大概需要6分钟。
内容图文
在项目开发中,经常会碰到图片上传,有些后台比较坑,上传图片一定需要按照服务端那边格式把body post过去才行,格式一定要正确,你懂的,有些在客户端直接传流即可。下面说的比较坑的图片怎么post,源代码网上也比较多,直接分享下代码。
上面有注释的很清晰就不一一解释了。
1._mResponseData 是NSMutableData对象。
2.解释下ImageName,这是个key,就是你要上传给服务器的入参,看服务器怎么给你定义的,我这边是ImageName。
3.parameters这个字典封装后台给你定义的入参,一般都以json格式,我这边parameters里面的入参有ImageName。
4.请求也粘贴在下面,可直接复制代码,返回的数组需要自己改动下。
#pragma mark - 上传图片
- ( void )requestPhotoApi:( NSDictionary *)parameters;
{
NSString *urlAsString = [ NSString stringWithFormat : @"%@?key=%@&" ,[ kTestRequestURL stringByAppendingString : @"sys/webapi/common/upload.do" ],[ FAUserModel getUserToken ]];
// 分界线的标识符
NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x" ;
// 根据 url 初始化 request
NSMutableURLRequest * request = [ NSMutableURLRequest requestWithURL :[ NSURL URLWithString :urlAsString]
cachePolicy : NSURLRequestUseProtocolCachePolicy
timeoutInterval : 20 ];
// 分界线 --AaB03x
NSString *MPboundary=[[ NSString alloc ] initWithFormat : @"--%@" ,TWITTERFON_FORM_BOUNDARY];
// 结束符 AaB03x--
NSString *endMPboundary=[[ NSString alloc ] initWithFormat : @"%@--" ,MPboundary];
//// 要上传的图片
UIImage *image=[parameters objectForKey : @"imageName" ];
// 得到图片的 data
NSData *data = UIImagePNGRepresentation (image);
//http body 的字符串
NSMutableString *body=[[ NSMutableString alloc ] init ];
// 参数的集合的所有 key 的集合
NSArray *keys= [parameters allKeys ];
// 遍历 keys
for ( int i= 0 ;i<[keys count ];i++){
// 得到当前 key
NSString *key=[keys objectAtIndex :i];
// 如果 key 不是 pic ,说明 value 是字符类型,比如 name : Boris
if (![key isEqualToString : @"imageName" ]) {
// 添加分界线,换行
[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=\"pic\"; filename=\"boris.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 :data];
// 加入结束符 --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 : @"%d" , ( int )[myRequestData length ]] forHTTPHeaderField : @"Content-Length" ];
// 设置 http body
[request setHTTPBody :myRequestData];
//http method
[request setHTTPMethod : @"POST" ];
// 建立连接,设置代理
NSURLConnection *conn = [[ NSURLConnection alloc ] initWithRequest :request delegate : self ];
// 设置接受 response 的 data
if (conn) {
_mResponseData = [[ NSMutableData alloc ] init ];
}
}
#pragma mark - NSURLConnectionDelegate
- ( void )connection:( NSURLConnection *)connection didReceiveResponse:( NSURLResponse *)response
{
[ _mResponseData setLength : 0 ];
}
- ( void )connection:( NSURLConnection *)connection didReceiveData:( NSData *)data
{
[ _mResponseData appendData :data];
}
- ( void )connectionDidFinishLoading:( NSURLConnection *)connection
{
NSDictionary *dic = [ NSJSONSerialization JSONObjectWithData : _mResponseData options : kNilOptions error : nil ];
NSLog ( @"%@" , dic);
if ( self . buttonTag == ButtonTag ) {
DLog ( @"11111:%@" ,dic[ @"data" ])
self . uploadSevenArray = [ NSMutableArray arrayWithArray :dic[ @"data" ]];
}
else {
DLog ( @"22222:%@" ,dic[ @"data" ])
self . uploadEgihtArray = [ NSMutableArray arrayWithArray :dic[ @"data" ]];
}
[ self refreshSendImImage ];
}
- ( void )connection:( NSURLConnection *)connection didFailWithError:( NSError *)error
{
NSLog ( @"Error: %@" , error);
}
原文:http://blog.csdn.net/defuliu66/article/details/51330239
内容总结
以上是互联网集市为您收集整理的iOS post上传图片全部内容,希望文章能够帮你解决iOS post上传图片所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。