IOS应用开发之图片上传

刚刚接触到一个图片上传的问题,困扰了三天,最后终得以领悟其中精髓。废话不多说,直接上代码

    NSURL *url = [NSURL URLWithString:@"http://192.168.1.62:8080/TinyBusiness/"];
    AFHTTPClient *httpClient = [AFHTTPClient clientWithBaseURL:url];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    // 设置时间格式
    
    formatter.dateFormat = @"yyyyMMddHHmmss";
    
    NSString *str = [formatter stringFromDate:[NSDate date]];
    
    NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
    MYLog(@"fileName=%@",fileName);
//    NSData *data = UIImagePNGRepresentation(imageNew);
//转换成data数据
    NSData *data = UIImagePNGRepresentation(imageDownView.image);
//data转换成base64
    NSString *encodedImageStr = [data base64EncodedStringWithOptions:0];
    NSDictionary *myDick = @{
                             @"merNo":_indefine,
                             @"comName": name.text,
                             @"comRepertory":repertory.text,
                             @"comPrize":price.text,
                             @"image":encodedImageStr,
                             @"comFreight":freight.text,
                             @"comType":classify.text
                             };
    //生成post请求
    NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"post" path:@"addCommodityAction!addCommodity" parameters:myDick constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        MYLog(@"%@",data);
        
        MYLog(@"---------%@",encodedImageStr);
        [formData appendPartWithFileData:data name:@"image" fileName:fileName mimeType:@"image/png"];
    }];
    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]initWithRequest:request];
    
    [op setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
        
        NSLog(@"上传 %f", (float)(totalBytesWritten / totalBytesExpectedToWrite));
    }];
    
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        MYLog(@"成功");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        MYLog(@"失败");
    }];
    [op start];

说起来挺简单的,上传图片无非是把图片转成两种格式服务器才可以接收,一种是二进制,一种是base64.本人研究了好久二进制这个东东,发现image图片转为data数据的时候貌似是生成的十六进制,没办法十六进制服务器人员根本不知道怎么去转化成图片,只好换另一种方法,转换成base64,以字符串的格式写入,这样子服务器也就能接收出来图片了,服务器接收base64格式的图片是需要先后台先base64_decode,后台做服务器的不懂怎么接收的人员看一下就知道了,很简单的东东,过一段时间让朋友把服务器接收base64格式的代码传上来,供大家参考。

服务器接收base64Demo链接地址

PS:本人使用的AFNetWork框架,还是蛮好用的,不知道怎么用的可以自己去查一下,其实本人建议ASI框架还是不要用了,虽然它比AFN强大,但同样的也要比AFN复杂,并且还不支持ARC,据说12年的时候就停止更新了,当然不是停止更新了就不能使用了,这只是小编的一点建议,没有别的意思,希望使用ASI框架的大牛勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值