iOS原生api post上传图片,上传视频

我之前在做文件上传的时候,不想用第三方的,于是就写了一个简单的图片上传方法



------------.h文件里面写一个这样方法-------

/**

 *  异步上传文件,视频,图片

 *

 *  @param name     名字  这个名字是和后台协定好的关键字

 *  @param filename 上传文件的名字

 *  @param mimeType 上传文件类型

 *  @param data     文件流数据

 *  @param upurl    上传路径

 *  @param params   上传参数

 *  @param complete block回调NSDictionary类型

 */


+(void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data upUrl:(NSString *)upurl parmas:(NSDictionary *)params complete:(void(^)(NSDictionary *dict))complete;


------------.m文件里面实现这个这样方法-------

 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]

+(void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString*)mimeType data:(NSData *)data upUrl:(NSString *)upurl parmas:(NSDictionary *)params complete:(void(^)(NSDictionary *dict))complete;{


NSLog(@"开始上传===================");

    // 文件上传

    NSURL *url = [NSURLURLWithString:upurl];

   NSLog(@"地址===========%@%@",upurl,params);

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:url];

    request.HTTPMethod =@"POST";

    

    // 设置请求体

    NSMutableData *body = [NSMutableDatadata];

    

    /***************文件参数***************/

    // 参数开始的标志

    [bodyappendData:YYEncode(@"--YY\r\n")];

    // name : 指定参数名(必须跟服务器端保持一致)

    // filename : 文件名

    NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, filename];

    [bodyappendData:YYEncode(disposition)];

    NSString *type = [NSStringstringWithFormat:@"Content-Type: %@\r\n", mimeType];

    [bodyappendData:YYEncode(type)];

    

    [bodyappendData:YYEncode(@"\r\n")];

    [bodyappendData:data];

    [bodyappendData:YYEncode(@"\r\n")];

    

    /***************普通参数***************/

    [paramsenumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) {

        // 参数开始的标志

        [bodyappendData:YYEncode(@"--YY\r\n")];

        NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];

        [bodyappendData:YYEncode(disposition)];

        

        [bodyappendData:YYEncode(@"\r\n")];

        [bodyappendData:YYEncode(obj)];

        [bodyappendData:YYEncode(@"\r\n")];

    }];

    

    /***************参数结束***************/

    // YY--\r\n

    [bodyappendData:YYEncode(@"--YY--\r\n")];

    request.HTTPBody = body;

    

    // 设置请求头

    // 请求体的长度

    [request setValue:[NSStringstringWithFormat:@"%zd", body.length]forHTTPHeaderField:@"Content-Length"];

    //声明这个POST请求是个文件上传

    [request setValue:@"multipart/form-data; boundary=YY"forHTTPHeaderField:@"Content-Type"];

    

    // 发送请求

    [NSURLConnectionsendAsynchronousRequest:requestqueue:[NSOperationQueuemainQueue]completionHandler:^(NSURLResponse *response,NSData *data,NSError *connectionError) {

       if (data) {

            NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableLeaveserror:nil];

            NSLog(@"-----------------%@", dict);

           NSLog(@"上传成功");

            complete(dict);

        }else {

           NSLog(@"上传失败");

        }

    }];

}



-----------这个方法的使用----------------------


NSMutableDictionary *param = [[NSMutableDictionaryalloc]init];//参数字典

//下面五个是参数,根据实际情况而定

[param setValue:dep forKey:@"description"];

[param setValue:_gpsString forKey:@"addr"];

NSLog(@"gpsstring==========%@",_gpsString);

[param setValue:_circleid forKey:@"circleId"];

[param setValue:userId forKey:@"userId"];

[param setValue:phoneNumber forKey:@"phoneNumber"];


NSString *name=@"userImg";//这个名字和后台商量好了

NSString *filename=@"images.jpg";//上传后的名字

NSString *mimeType=@"image/jpeg";//上传类型

NSString *upurl=[NSString stringWithFormat:@"%@/%@",IP,UPDATA_USER_HEAD_IMG];

//上传路径,你们自己的路径

NSData *data = [NSData dataWithContentsOfFile:fullPath];//data数据流,图片的路径


/*

 如果是上传视频的话

 NSData *data = [NSData dataWithContentsOfFile:fullPath];

 //data数据流fullPath就是保存视频的路径

 NSString *name=@"fileVideo";(和后台保持一致)

 NSString *filename=@"videos.mp4";

 NSString *mimeType=@"video/mp4";//(视频和图片的格式有多种,这里就不举例了)

 */

//下面是上传方法

 [Upload upload:namefilename:filenamemimeType:mimeTypedata:dataupUrl:upurlparmas:paramcomplete:^(NSDictionary *dict) {

        

        if ([[dictobjectForKey:@"status"]isEqualToString:@"0"]) {

           NSLog(@"上传头像成功");

            

           NSString * userImg=[dictobjectForKey:@"userImg"];

            [appDelegate.appDefaultsetObject:userImgforKey:@"imgPath"];

            

           //创建通知

            NSNotification *notification =[NSNotificationnotificationWithName:@"updateHeadImgtongzhi"object:niluserInfo:nil];

           //通过通知中心发送通知

            [[NSNotificationCenterdefaultCenter]postNotification:notification];

        }

        

    }];




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值