IOS上传照片源代码
UploadPhotoViewController.h 头文件
#import <UIKit/UIKit.h> #import "MBProgressHUD.h" @interface UploadPhotoViewController :UIViewController<MBProgressHUDDelegate,UIActionSheetDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>{ MBProgressHUD *HUD; } -(void) snapImage;//拍照 -(void) pickImage;//从相册里找 - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;//把图缩放到合适的尽寸 @end
UploadPhotoViewController.m 源文件
#import "UploadPhotoViewController.h" #import"ASIFormDataRequest.h"//ASIRequest用来上传图片 #import"HJManagedImageV.h" //HJManagedImageV是图片缓存类,可以用其它异步加载图片类取代 #import "JSON.h" #define UPLOAD_URL @"http://localhost/upload.php"//上传地址 @implementation UploadPhotoViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [superdidReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } #pragma mark - View lifecycle - (void)viewDidLoad { [superviewDidLoad]; // Do any additional setup after loading the view from its nib. self.title =@"上代图片例子"; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; HJManagedImageV* mi = [[[HJManagedImageValloc] initWithFrame:CGRectMake(20,20,280,280)]autorelease]; mi.url = [NSURL URLWithString:@"图片地址"]]; [mi showLoadingWheel]; mi.tag = 777 ; [self.scrollView addSubview:mi]; MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; [mi setCallbackOnImageTap:self method:@selector(uploadPortrait:)];//点击图片,执行上传图片操作 [appDelegate.objMan manage:mi];//加载图片 } - (void)viewDidUnload { [superviewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void)dealloc { [super dealloc]; } //上传图片操作开始,选择图片的来源 -(void)uploadPortrait:(id)sender{ UIActionSheet *menu = [[UIActionSheetalloc] initWithTitle: @"更改图片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"拍照",@"从相册上传",nil]; menu.actionSheetStyle =UIActionSheetStyleBlackTranslucent; [menu showInView:self.navigationController.view]; } - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if(buttonIndex == 0){ [self snapImage]; }else if(buttonIndex ==1){ [self pickImage]; } [actionSheet release]; } - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{ // 创建一个bitmap的context // 并把它设置成为当前正在使用的context UIGraphicsBeginImageContext(size); // 绘制改变大小的图片 [img drawInRect:CGRectMake(0,0, size.width, size.height)]; // 从当前context中创建一个改变大小后的图片 UIImage* scaledImage =UIGraphicsGetImageFromCurrentImageContext(); // 使当前的context出堆栈 UIGraphicsEndImageContext(); //返回新的改变大小后的图片 return scaledImage; } -(void)uploadPortraitTask:(NSDictionary *)info{ // Do something usefull in here instead of sleeping ... NSURL *URL = [NSURLURLWithString:UPLOAD_URL]; ASIFormDataRequest *Request = [ASIFormDataRequestrequestWithURL:URL]; [Request setRequestMethod:@"POST"]; [Request addRequestHeader:@"Content-Type"value:@"application/json"]; [Request setTimeOutSeconds:60]; //[Request setPostValue:auth forKey:@"auth"]; UIImage *img = [selfscaleToSize:[infoobjectForKey:@"UIImagePickerControllerOriginalImage"]size:CGSizeMake(300,300)]; [Request setData:UIImagePNGRepresentation(img)forKey:@"file"]; [Request setDelegate:self]; [Request setCompletionBlock:^{ NSString *responseString = [Request responseString]; //NSLog(@"Response: %@", responseString); NSDictionary *info = [responseString JSONValue]; NSNumber *status = [info objectForKey:@"status"]; if([status intValue]==1){ HJManagedImageV* mi = (HJManagedImageV *)[self.viewviewWithTag:777]; //set the URL that we want the managed image view to load [mi clear]; mi.url = [NSURLURLWithString:[info objectForKey:@"filePath"]]; [mi showLoadingWheel]; mi.tag = 777 ; IBMEventAppDelegate *appDelegate = (IBMEventAppDelegate *)[[UIApplicationsharedApplication] delegate]; //[mi setCallbackOnImageTap:self method:@selector(uploadPortrait:)]; [appDelegate.objMan manage:mi]; [appDelegate loadLoginInfoData]; UIAlertView *av=[[[UIAlertViewalloc] initWithTitle:nilmessage:@"图片上传成功!" delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil]autorelease]; [av show]; }else if([statusintValue]==-1){ UIAlertView *av=[[[UIAlertViewalloc] initWithTitle:nilmessage:[info objectForKey:@"msg"]delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil]autorelease]; [av show]; }else{ UIAlertView *av=[[[UIAlertViewalloc] initWithTitle:nilmessage:[info objectForKey:@"msg"]delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil]autorelease]; [av show]; } [MBProgressHUDhideHUDForView:self.navigationController.viewanimated:YES]; }]; [Request setFailedBlock:^{ NSError *error = [Request error]; NSLog(@"Error: %@,%@", error.localizedDescription,Request.url); }]; [Request startSynchronous]; } - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo; { if (!error){ UIAlertView *av=[[[UIAlertViewalloc] initWithTitle:nilmessage:@"Image written to photo album"delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil]autorelease]; [av show]; }else{ UIAlertView *av=[[[UIAlertViewalloc] initWithTitle:nilmessage:[NSStringstringWithFormat:@"Error writing to photo album: %@",[errorlocalizedDescription]] delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil]autorelease]; [av show]; } } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { HUD = [MBProgressHUDshowHUDAddedTo:self.navigationController.viewanimated:YES]; HUD.dimBackground =YES; HUD.delegate =self; HUD.labelText =@"请稍等"; HUD.square =YES; [HUDshowWhileExecuting:@selector(uploadPortraitTask:)onTarget:selfwithObject:info animated:YES]; //SETIMAGE([info objectForKey:@"UIImagePickerControllerOriginalImage"]); [selfdismissModalViewControllerAnimated:YES]; [picker release]; } // Provide 2.x compliance - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { NSDictionary *dict = [NSDictionarydictionaryWithObject:imageforKey:@"UIImagePickerControllerOriginalImage"]; [selfimagePickerController:picker didFinishPickingMediaWithInfo:dict]; } // Optional but "expected" dismiss /* - (void) imagePickerControllerDidCancel: (UIImagePickerController *)picker { [self dismissModalViewControllerAnimated:YES]; [picker release]; } */ - (void) pickImage { UIImagePickerController *ipc = [[UIImagePickerControlleralloc] init]; ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; ipc.delegate =self; ipc.allowsEditing =NO; [selfpresentModalViewController:ipc animated:YES]; } - (void) snapImage { UIImagePickerController *ipc = [[UIImagePickerControlleralloc] init]; ipc.sourceType = UIImagePickerControllerSourceTypeCamera; ipc.delegate =self; ipc.allowsEditing =NO; [selfpresentModalViewController:ipc animated:YES]; }