zoukankan      html  css  js  c++  java
  • IOS上传图片方法类

    IOS上传图片方法类

     
    iPhone开发中遇到上传图片问题,找到多资料,最终封装了一个类,请大家指点,代码如下 
    复制代码
    //
    //  RequestPostUploadHelper.h
    //  demodes
    //
    //  Created by 张浩 on 13-5-8.
    //  Copyright (c) 2013年 张浩. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface RequestPostUploadHelper : NSObject
    
    /**
     *POST 提交 并可以上传图片目前只支持单张
     */
    + (NSString *)postRequestWithURL: (NSString *)url  // IN
                                postParems: (NSMutableDictionary *)postParems // IN 提交参数据集合
                                picFilePath: (NSString *)picFilePath  // IN 上传图片路径
                                picFileName: (NSString *)picFileName;  // IN 上传图片名称
    
    /**
     * 修发图片大小
     */
    + (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;
    /**
     * 保存图片
     */
    + (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;
    /**
     * 生成GUID
     */
    + (NSString *)generateUuidString;
    @end
    复制代码

     

    复制代码
    //
    //  RequestPostUploadHelper.m
    //  demodes
    //
    //  Created by 张浩 on 13-5-8.
    //  Copyright (c) 2013年 张浩. All rights reserved.
    //
    
    #import "RequestPostUploadHelper.h"
    
    @implementation RequestPostUploadHelper
    
    static NSString * const FORM_FLE_INPUT = @"file";
    
    + (NSString *)postRequestWithURL: (NSString *)url  // IN
                          postParems: (NSMutableDictionary *)postParems // IN
                         picFilePath: (NSString *)picFilePath  // IN
                         picFileName: (NSString *)picFileName;  // IN
    {
        
       
        NSString *TWITTERFON_FORM_BOUNDARY = @"0xKhTmLbOuNdArY";
        //根据url初始化request
        NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
                                                               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                                           timeoutInterval:10];
        //分界线 --AaB03x
        NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
        //结束符 AaB03x--
        NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
        //得到图片的data
        NSData* data;
        if(picFilePath){
         
            UIImage *image=[UIImage imageWithContentsOfFile:picFilePath];
            //判断图片是不是png格式的文件
            if (UIImagePNGRepresentation(image)) {
                //返回为png图像。
                data = UIImagePNGRepresentation(image);
            }else {
                //返回为JPEG图像。
                data = UIImageJPEGRepresentation(image, 1.0);
            }
        }
        //http body的字符串
        NSMutableString *body=[[NSMutableString alloc]init];
        //参数的集合的所有key的集合
        NSArray *keys= [postParems allKeys];
        
        //遍历keys
        for(int i=0;i<[keys count];i++)
        {
            //得到当前key
            NSString *key=[keys objectAtIndex:i];
          
            //添加分界线,换行
            [body appendFormat:@"%@
    ",MPboundary];
            //添加字段名称,换2行
            [body appendFormat:@"Content-Disposition: form-data; name="%@"
    
    ",key];
            //添加字段的值
            [body appendFormat:@"%@
    ",[postParems objectForKey:key]];
            
             NSLog(@"添加字段的值==%@",[postParems objectForKey:key]);
        }
        
        if(picFilePath){
        ////添加分界线,换行
            [body appendFormat:@"%@
    ",MPboundary];
        
            //声明pic字段,文件名为boris.png
            [body appendFormat:@"Content-Disposition: form-data; name="%@"; filename="%@"
    ",FORM_FLE_INPUT,picFileName];
            //声明上传文件的格式
            [body appendFormat:@"Content-Type: image/jpge,image/gif, image/jpeg, image/pjpeg, image/pjpeg
    
    "];
        }
        
        //声明结束符:--AaB03x--
        NSString *end=[[NSString alloc]initWithFormat:@"
    %@",endMPboundary];
        //声明myRequestData,用来放入http body
        NSMutableData *myRequestData=[NSMutableData data];
    
        //将body字符串转化为UTF8格式的二进制
        [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
        if(picFilePath){
            //将image的data加入
            [myRequestData appendData:data];
        }
        //加入结束符--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:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];
        //设置http body
        [request setHTTPBody:myRequestData];
        //http method
        [request setHTTPMethod:@"POST"];
        
        
        NSHTTPURLResponse *urlResponese = nil;
        NSError *error = [[NSError alloc]init];
        NSData* resultData = [NSURLConnection sendSynchronousRequest:request   returningResponse:&urlResponese error:&error];
        NSString* result= [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
        if([urlResponese statusCode] >=200&&[urlResponese statusCode]<300){
            NSLog(@"返回结果=====%@",result);
            return result;
        }
        return nil;
    }
    
    /**
     * 修发图片大小
     */
    + (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize{
        newSize.height=image.size.height*(newSize.width/image.size.width);
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return  newImage;
    
    }
    
    /**
     * 保存图片
     */
    + (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName{
        NSData* imageData;
        
        //判断图片是不是png格式的文件
        if (UIImagePNGRepresentation(tempImage)) {
            //返回为png图像。
            imageData = UIImagePNGRepresentation(tempImage);
        }else {
            //返回为JPEG图像。
            imageData = UIImageJPEGRepresentation(tempImage, 1.0);
        }   
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        
        NSString* documentsDirectory = [paths objectAtIndex:0];
        
        NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];
    
        NSArray *nameAry=[fullPathToFile componentsSeparatedByString:@"/"];
        NSLog(@"===fullPathToFile===%@",fullPathToFile);
        NSLog(@"===FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);
        
        [imageData writeToFile:fullPathToFile atomically:NO];
        return fullPathToFile;
    }
    
    /**
     * 生成GUID
     */
    + (NSString *)generateUuidString{
        // create a new UUID which you own
        CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
        
        // create a new CFStringRef (toll-free bridged to NSString)
        // that you own
        NSString *uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
        
        // transfer ownership of the string
        // to the autorelease pool
        [uuidString autorelease];
        
        // release the UUID
        CFRelease(uuid);
        
        return uuidString;
    }
    @end
    复制代码

    DEMO

    复制代码
    //
    //  UploadViewController.h
    //  demodes
    //
    //  Created by 张浩 on 13-5-6.
    //  Copyright (c) 2013年 张浩. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface UploadViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate>
    - (IBAction)onClickUploadPic:(id)sender;
    - (void) snapImage;//拍照
    - (void) pickImage;//从相册里找
    - (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;
    - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;
    - (IBAction)onPostData:(id)sender;
    - (NSString *)generateUuidString;
    @end
    复制代码

     

    复制代码
    //
    //  UploadViewController.m
    //  demodes
    //
    //  Created by 张浩 on 13-5-6.
    //  Copyright (c) 2013年 张浩. All rights reserved.
    //
    
    #import "UploadViewController.h"
    #import "RequestPostUploadHelper.h"
    @interface UploadViewController ()
    
    @end
    
    NSString *TMP_UPLOAD_IMG_PATH=@"";
    @implementation UploadViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (IBAction)onClickUploadPic:(id)sender {
        UIActionSheet *menu=[[UIActionSheet alloc] initWithTitle:@"上传图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照上传",@"从相册上传", nil];
        menu.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
        [menu showInView:self.view];
        
    }
    - (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
         NSLog(@"33333333333333");
        if(buttonIndex==0){
            [self snapImage];
            NSLog(@"111111111111");
        }else if(buttonIndex==1){
            [self pickImage];
            NSLog(@"222222222222");
        }
        
        [actionSheet release];
    }
    //拍照
    - (void) snapImage{
        UIImagePickerController *ipc=[[UIImagePickerController alloc] init];
        ipc.sourceType=UIImagePickerControllerSourceTypeCamera;
        ipc.delegate=self;
        ipc.allowsEditing=NO;
        [self presentModalViewController:ipc animated:YES];
        
    }
    //从相册里找
    - (void) pickImage{
        UIImagePickerController *ipc=[[UIImagePickerController alloc] init];
        ipc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
        ipc.delegate=self;
        ipc.allowsEditing=NO;
        [self presentModalViewController:ipc animated:YES];
    }
    
    -(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *) info{
        UIImage *img=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
    
        if(picker.sourceType==UIImagePickerControllerSourceTypeCamera){
    //        UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil);
        }
        UIImage *newImg=[self imageWithImageSimple:img scaledToSize:CGSizeMake(300, 300)];
        [self saveImage:newImg WithName:[NSString stringWithFormat:@"%@%@",[self generateUuidString],@".jpg"]];
        [self dismissModalViewControllerAnimated:YES];
        [picker release];
    
    }
    -(UIImage *) imageWithImageSimple:(UIImage*) image scaledToSize:(CGSize) newSize{
        newSize.height=image.size.height*(newSize.width/image.size.width);
        UIGraphicsBeginImageContext(newSize);
        [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return  newImage;
    }
    
    - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName
    
    {
        NSLog(@"===TMP_UPLOAD_IMG_PATH===%@",TMP_UPLOAD_IMG_PATH);
        NSData* imageData = UIImagePNGRepresentation(tempImage);
        
        NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        
        NSString* documentsDirectory = [paths objectAtIndex:0];
        
        // Now we get the full path to the file
        
        NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];
        
        // and then we write it out
        TMP_UPLOAD_IMG_PATH=fullPathToFile;
        NSArray *nameAry=[TMP_UPLOAD_IMG_PATH componentsSeparatedByString:@"/"];
        NSLog(@"===new fullPathToFile===%@",fullPathToFile);
        NSLog(@"===new FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);
        
        [imageData writeToFile:fullPathToFile atomically:NO];
        
    }
    
    - (IBAction)onPostData:(id)sender {
        NSMutableDictionary * dir=[NSMutableDictionary dictionaryWithCapacity:7];
        //[dir setValue:@"save" forKey:@"m"];
        [dir setValue:@"IOS上传试试" forKey:@"title"];
        [dir setValue:@"IOS上传试试" forKey:@"content"];
        [dir setValue:@"28" forKey:@"clubUserId"];
        [dir setValue:@"1" forKey:@"clubSectionId"];
        [dir setValue:@"192.168.0.26" forKey:@"ip"];
        [dir setValue:@"asfdfasdfasdfasdfasdfasd=" forKey:@"sid"];
        NSString *url=@"http://192.168.0.26:8090/api/club/topicadd.do?m=save";
        NSLog(@"=======上传");
        if([TMP_UPLOAD_IMG_PATH isEqualToString:@""]){
            [RequestPostUploadHelper postRequestWithURL:url postParems:dir picFilePath:nil picFileName:nil];
        }else{
            NSLog(@"有图标上传");
            NSArray *nameAry=[TMP_UPLOAD_IMG_PATH componentsSeparatedByString:@"/"];
           [RequestPostUploadHelper postRequestWithURL:url postParems:dir picFilePath:TMP_UPLOAD_IMG_PATH picFileName:[nameAry objectAtIndex:[nameAry count]-1]];;
        }
     
    }
    - (NSString *)generateUuidString
    {
        // create a new UUID which you own
        CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
        
        // create a new CFStringRef (toll-free bridged to NSString)
        // that you own
        NSString *uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
        
        // transfer ownership of the string
        // to the autorelease pool
        [uuidString autorelease];
        
        // release the UUID
        CFRelease(uuid);
        
        return uuidString;
    }
    @end
    复制代码
    原文:http://www.cnblogs.com/skyblue/archive/2013/05/08/3067108.html
  • 相关阅读:
    Django之权限用法
    Django之stark组件的使用和总结
    Django之stark组件2
    Wmic
    Powershell + HTA
    IFG以太网帧间隙
    python编译报错
    C# 格式化XML方法
    C#开发中常用的加密解密方法
    面试题
  • 原文地址:https://www.cnblogs.com/langtianya/p/4005523.html
Copyright © 2011-2022 走看看