您的位置:首页 > 移动开发 > IOS开发

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

2016-06-15 16:53 579 查看
我之前在做文件上传的时候,不想用第三方的,于是就写了一个简单的图片上传方法

------------.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];
        }

        
    }];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息