首页 > 移动平台 > 详细

IOS关于图片上传

时间:2015-10-19 16:50:49      阅读:325      评论:0      收藏:0      [点我收藏+]

iOS上传图片有固定的格式 
需要把图片的数据再request的HTTPBody中配置好

格式

/*

     --Boundary+72D4CD655314C423   // 分割符,以“--”开头,后面的字随便写,只要不写中文即可

     Content-Disposition: form-data; name="uploadFile"; filename="001.png"  //这里一定要记住filename = “fghhj.jpg”一定要有扩展名jpg或者别的 这里注明服务器接收图片的参数(类似于接收用户名的userName)及服务器上保存图片的文件名

     Content-Type:image/png  // 图片类型为png

     Content-Transfer-Encoding: binary  // 编码方式

     // 这里是空一行,必不可少!!

     ... contents of boris.png ...  // 图片数据部分

     --Boundary+72D4CD655314C423--  // 分隔符后面以"--"结尾,表明结束

     */

//上传图片
- (void)upLoadImage:(UIImage *)image requestURL:(NSString *)url Success:(SuccessBlock)success {
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    [self setMutableRequest:request WithImage:image];
    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [self.view addSubview:activity];
    activity.center = CGPointMake(self.view.bounds.size.width*0.5, self.view.bounds.size.height*0.5);
    [activity startAnimating];
    NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        [activity stopAnimating];
        if (success) {
            if (data) {
                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                success(dic);
            }
            else {
                [self showToast:@"上传失败"];
            }
        }
    }];
    
    [task resume];
}

//拼接数据
- (void)setMutableRequest:(NSMutableURLRequest *)request WithImage:(UIImage *)image {
    
    //构造分界线 boundary
    NSString *boundary = [NSString stringWithFormat:@"upoad%d%d",arc4random(),arc4random()];
    //图片数据
    NSData *imageData = UIImagePNGRepresentation(image);/*(image, 1);*/
    
    
    /*
     --Boundary+72D4CD655314C423   // 分割符,以“--”开头,后面的字随便写,只要不写中文即可
     Content-Disposition: form-data; name="uploadFile"; filename="001.png"  // 这里注明服务器接收图片的参数(类似于接收用户名的userName)及服务器上保存图片的文件名
     Content-Type:image/png  // 图片类型为png
     Content-Transfer-Encoding: binary  // 编码方式
     // 这里是空一行,必不可少!!
     ... contents of boris.png ...  // 图片数据部分
     --Boundary+72D4CD655314C423--  // 分隔符后面以"--"结尾,表明结束
     */
    //请求头
    NSMutableString *topStr = [NSMutableString string];
//    [topStr appendFormat:@"--%@\r\n",boundary];
//    [topStr appendFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon"];
//    [topStr appendFormat:@"Content-Type:image/jpeg\r\n"];
//    [topStr appendFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"];
    
    [topStr appendString:[NSString stringWithFormat:@"--%@\r\n",boundary]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon.png"]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Type:image/png\r\n"]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]];

    
    //拼接数据
    NSMutableData *requestBody = [NSMutableData data];
    [requestBody appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]];
    [requestBody appendData:imageData];
    [requestBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //结束部分
    [requestBody appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
   
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:requestBody];
    
    [request setValue:[NSString stringWithFormat:@"%zd", requestBody.length] forHTTPHeaderField:@"Content-Length"];
    // 设置头部数据,指定了http post请求的编码方式为multipart/form-data(上传文件必须用这个)。
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"];
    
}

 

文件上传请求数据格式

技术分享

部分文件的type
技术分享

 

IOS关于图片上传

原文:http://www.cnblogs.com/feiyudexingfu/p/4892031.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!