9 #import
10
11 @interface RequestPostUploadHelper : NSObject
12
13
16 + (NSString *)postRequestWithURL: (NSString *)url // IN
17 postParems: (NSMutableDictionary *)postParems // IN 提交参数据集合
18 picFilePath: (NSString *)picFilePath // IN 上传图片路径
19 picFileName: (NSString *)picFileName; // IN 上传图片名称
20
21
24 + (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;
25
28 + (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;
29
32 + (NSString *)generateUuidString;
33 @end
9 #import "RequestPostUploadHelper.h"
10
11 @implementation RequestPostUploadHelper
12
13 static NSString * const FORM_FLE_INPUT = @"file";
14
15 + (NSString *)postRequestWithURL: (NSString *)url // IN
16 postParems: (NSMutableDictionary *)postParems // IN
17 picFilePath: (NSString *)picFilePath // IN
18 picFileName: (NSString *)picFileName; // IN
19 {
20
21
22 NSString *TWITTERFON_FORM_BOUNDARY = @"0xKhTmLbOuNdArY";
23 //根据url初始化request
24 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
25 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
26 timeoutInterval:10];
27 //分界线 --AaB03x
28 NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
29 //结束符 AaB03x--
30 NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
31 //得到图片的data
32 NSData* data;
33 if(picFilePath){
34
35 UIImage *image=[UIImage imageWithContentsOfFile:picFilePath];
36 //判断图片是不是png格式的文件
37 if (UIImagePNGRepresentation(image)) {
38 //返回为png图像。
39 data = UIImagePNGRepresentation(image);
40 }else {
41 //返回为JPEG图像。
42 data = UIImageJPEGRepresentation(image, 1.0);
43 }
44 }
45 //http body的字符串
46 NSMutableString *body=[[NSMutableString alloc]init];
47 //参数的集合的所有key的集合
48 NSArray *keys= [postParems allKeys];
49
50 //遍历keys
51 for(int i=0;i<[keys count];i++)
52 {
53 //得到当前key
54 NSString *key=[keys objectAtIndex:i];
55
56 //添加分界线,换行
57 [body appendFormat:@"%@\r\n",MPboundary];
58 //添加字段名称,换2行
59 [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
60 //添加字段的值
61 [body appendFormat:@"%@\r\n",[postParems objectForKey:key]];
62
63 NSLog(@"添加字段的值==%@",[postParems objectForKey:key]);
64 }
65
66 if(picFilePath){
67 ////添加分界线,换行
68 [body appendFormat:@"%@\r\n",MPboundary];
69
70 //声明pic字段,文件名为boris.png
71 [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename="%@"\r\n",FORM_FLE_INPUT,picFileName];
72 //声明上传文件的格式
73 [body appendFormat:@"Content-Type: image/jpge,image/gif, image/jpeg, image/pjpeg, image/pjpeg\r\n\r\n"];
74 }
75
76 //声明结束符:--AaB03x--
77 NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];
78 //声明myRequestData,用来放入http body
79 NSMutableData *myRequestData=[NSMutableData data];
80
81 //将body字符串转化为UTF8格式的二进制
82 [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
83 if(picFilePath){
84 //将image的data加入
85 [myRequestData appendData:data];
86 }
87 //加入结束符--AaB03x--
88 [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
89
90 //设置HTTPHeader中Content-Type的值
91 NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
92 //设置HTTPHeader
93 [request setValue:content forHTTPHeaderField:@"Content-Type"];
94 //设置Content-Length
95 [request setValue:[NSString stringWithFormat:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];
96 //设置http body
97 [request setHTTPBody:myRequestData];
98 //http method
99 [request setHTTPMethod:@"POST"];
100
101
102 NSHTTPURLResponse *urlResponese = nil;
103 NSError *error = [[NSError alloc]init];
104 NSData* resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponese error:&error];
105 NSString* result= [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
106 if([urlResponese statusCode] >=200&&[urlResponese statusCode]<<span style="margin: 0px; padding: 0px; font-family: 'Courier New'; color: rgb(128, 0, 128);">300){
107 NSLog(@"返回结果=====%@",result);
108 return result;
109 }
110 return nil;
111 }
112
113
116 + (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize{
117 newSize.height=image.size.height*(newSize.width/image.size.width);
118 UIGraphicsBeginImageContext(newSize);
119 [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
120 UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
121 UIGraphicsEndImageContext();
122 return newImage;
123
124 }
125
126
129 + (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName{
130 NSData* imageData;
131
132 //判断图片是不是png格式的文件
133 if (UIImagePNGRepresentation(tempImage)) {
134 //返回为png图像。
135 imageData = UIImagePNGRepresentation(tempImage);
136 }else {
137 //返回为JPEG图像。
138 imageData = UIImageJPEGRepresentation(tempImage, 1.0);
139 }
140 NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
141
142 NSString* documentsDirectory = [paths objectAtIndex:0];
143
144 NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];
145
146 NSArray *nameAry=[fullPathToFile componentsSeparatedByString:@"/"];
147 NSLog(@"===fullPathToFile===%@",fullPathToFile);
148 NSLog(@"===FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);
149
150 [imageData writeToFile:fullPathToFile atomically:NO];
151 return fullPathToFile;
152 }
153
154
157 + (NSString *)generateUuidString{
158 // create a new UUID which you own
159 CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
160
161 // create a new CFStringRef (toll-free bridged to NSString)
162 // that you own
163 NSString *uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
164
165 // transfer ownership of the string
166 // to the autorelease pool
167 [uuidString autorelease];
168
169 // release the UUID
170 CFRelease(uuid);
171
172 return uuidString;
173 }
174 @end
10
11 @interface UploadViewController : UIViewController
12 - (IBAction)onClickUploadPic:(id)sender;
13 - (void) snapImage;//拍照
14 - (void) pickImage;//从相册里找
15 - (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;
16 - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;
17 - (IBAction)onPostData:(id)sender;
18 - (NSString *)generateUuidString;
19 @end
9 #import "UploadViewController.h"
10 #import "RequestPostUploadHelper.h"
11 @interface UploadViewController ()
12
13 @end
14
15 NSString *TMP_UPLOAD_IMG_PATH=@"";
16 @implementation UploadViewController
17
18 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
19 {
20 self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
21 if (self) {
22 // Custom initialization
23 }
24 return self;
25 }
26
27 - (void)viewDidLoad
28 {
29 [super viewDidLoad];
30 // Do any additional setup after loading the view from its nib.
31 }
32
33 - (void)didReceiveMemoryWarning
34 {
35 [super didReceiveMemoryWarning];
36 // Dispose of any resources that can be recreated.
37 }
38
39 - (IBAction)onClickUploadPic:(id)sender {
40 UIActionSheet *menu=[[UIActionSheet alloc] initWithTitle:@"上传图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照上传",@"从相册上传", nil];
41 menu.actionSheetStyle=UIActionSheetStyleBlackTranslucent;
42 [menu showInView:self.view];
43
44 }
45 - (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
46 NSLog(@"33333333333333");
47 if(buttonIndex==0){
48 [self snapImage];
49 NSLog(@"111111111111");
50 }else if(buttonIndex==1){
51 [self pickImage];
52 NSLog(@"222222222222");
53 }
54
55 [actionSheet release];
56 }
57 //拍照
58 - (void) snapImage{
59 UIImagePickerController *ipc=[[UIImagePickerController alloc] init];
60 ipc.sourceType=UIImagePickerControllerSourceTypeCamera;
61 ipc.delegate=self;
62 ipc.allowsEditing=NO;
63 [self presentModalViewController:ipc animated:YES];
64
65 }
66 //从相册里找
67 - (void) pickImage{
68 UIImagePickerController *ipc=[[UIImagePickerController alloc] init];
69 ipc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
70 ipc.delegate=self;
71 ipc.allowsEditing=NO;
72 [self presentModalViewController:ipc animated:YES];
73 }
74
75 -(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *) info{
76 UIImage *img=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
77
78 if(picker.sourceType==UIImagePickerControllerSourceTypeCamera){
79 // UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil);
80 }
81 UIImage *newImg=[self imageWithImageSimple:img scaledToSize:CGSizeMake(300, 300)];
82 [self saveImage:newImg WithName:[NSString stringWithFormat:@"%@%@",[self generateUuidString],@".jpg"]];
83 [self dismissModalViewControllerAnimated:YES];
84 [picker release];
85
86 }
87 -(UIImage *) imageWithImageSimple:(UIImage*) image scaledToSize:(CGSize) newSize{
88 newSize.height=image.size.height*(newSize.width/image.size.width);
89 UIGraphicsBeginImageContext(newSize);
90 [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
91 UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
92 UIGraphicsEndImageContext();
93 return newImage;
94 }
95
96 - (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName
97
98 {
99 NSLog(@"===TMP_UPLOAD_IMG_PATH===%@",TMP_UPLOAD_IMG_PATH);
100 NSData* imageData = UIImagePNGRepresentation(tempImage);
101
102 NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
103
104 NSString* documentsDirectory = [paths objectAtIndex:0];
105
106 // Now we get the full path to the file
107
108 NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];
109
110 // and then we write it out
111 TMP_UPLOAD_IMG_PATH=fullPathToFile;
112 NSArray *nameAry=[TMP_UPLOAD_IMG_PATH componentsSeparatedByString:@"/"];
113 NSLog(@"===new fullPathToFile===%@",fullPathToFile);
114 NSLog(@"===new FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);
115
116 [imageData writeToFile:fullPathToFile atomically:NO];
117
118 }
119
120 - (IBAction)onPostData:(id)sender {
121 NSMutableDictionary * dir=[NSMutableDictionary dictionaryWithCapacity:7];
122 //[dir setValue:@"save" forKey:@"m"];
123 [dir setValue:@"IOS上传试试" forKey:@"title"];
124 [dir setValue:@"IOS上传试试" forKey:@"content"];
125 [dir setValue:@"28" forKey:@"clubUserId"];
126 [dir setValue:@"1" forKey:@"clubSectionId"];
127 [dir setValue:@"192.168.0.26" forKey:@"ip"];
128 [dir setValue:@"asfdfasdfasdfasdfasdfasd=" forKey:@"sid"];
129 NSString *url=@"http://192.168.0.26:8090/api/club/topicadd.do?m=save";
130 NSLog(@"=======上传");
131 if([TMP_UPLOAD_IMG_PATH isEqualToString:@""]){
132 [RequestPostUploadHelper postRequestWithURL:url postParems:dir picFilePath:nil picFileName:nil];
133 }else{
134 NSLog(@"有图标上传");
135 NSArray *nameAry=[TMP_UPLOAD_IMG_PATH componentsSeparatedByString:@"/"];
136 [RequestPostUploadHelper postRequestWithURL:url postParems:dir picFilePath:TMP_UPLOAD_IMG_PATH picFileName:[nameAry objectAtIndex:[nameAry count]-1]];;
137 }
138
139 }
140 - (NSString *)generateUuidString
141 {
142 // create a new UUID which you own
143 CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
144
145 // create a new CFStringRef (toll-free bridged to NSString)
146 // that you own
147 NSString *uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
148
149 // transfer ownership of the string
150 // to the autorelease pool
151 [uuidString autorelease];
152
153 // release the UUID
154 CFRelease(uuid);
155
156 return uuidString;
157 }
158 @end