美文网首页
Ios-图片以File(文件)格式Post上传

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

作者: 今年我25 | 来源:发表于2016-09-26 10:26 被阅读4057次

    下面的截图,就是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);

    }

    }

    });

    }];

    }

    相关文章

      网友评论

          本文标题:Ios-图片以File(文件)格式Post上传

          本文链接:https://www.haomeiwen.com/subject/ddhqyttx.html