AFHTTPRequestOperationManager注意点 上传图片到服务器

       写程序的时候遇到图片上传的问题,被一个后台人员追着问接口是什么,我第一时间就找到了给他,但是他一直说不是,由于我们程序里面的上传功能是封装好的,而且我从来没搞过这方面,不知道原理是什么,他说不是,我就没多想,就使劲的找,这货守着老板一个劲的损我,什么你写的程序接口都找不到吗这那的,后来我仔细研究了一下,丫的,就是这个接口,?



ActionSheet在控制器view上,因为点击拍照时,会modal出另外一个控制器,当前的控制器view就会从窗口中移除。就会报ActionSheet不在窗口上。
- ( void )touchesBegan:( NSSet  *)touches withEvent:( UIEvent  *)event
{
   
  UIActionSheet  *sheet = [[ UIActionSheet  alloc ]  initWithTitle : @" 图片上传 "  delegate: self  cancelButtonTitle : @" 取消 "  destructiveButtonTitle : nil  otherButtonTitles : @" 拍照 " ,  @" 相册 " , nil ];
    [sheet
  showInView : self . view ];
}

#pragma mark -  实现 UIActionSheetDelegate 代理方法
- ( void )actionSheet:( UIActionSheet  *)actionSheet clickedButtonAtIndex:( NSInteger )buttonIndex
{
   
  UIImagePickerController  *ipc = [[ UIImagePickerController  alloc ]  init ];
    ipc.
delegate  =  self ;
   
  switch  (buttonIndex) {
       
  case  0 :
           
  if  (![ UIImagePickerController  isSourceTypeAvailable : UIImagePickerControllerSourceTypeCamera ])  return ;
            ipc.
sourceType  =  UIImagePickerControllerSourceTypeCamera ;
           
  break ;
       
  case  1 :
           
  if  (![ UIImagePickerController  isSourceTypeAvailable : UIImagePickerControllerSourceTypePhotoLibrary ]) return ;
            ipc.
sourceType  =  UIImagePickerControllerSourceTypePhotoLibrary ;
           
  break ;
           
       
  default :
           
  break ;
    }
    [
self  presentViewController :ipc  animated : YES  completion : nil ];
}
注意:
如果在switchcase中定义一个局部变量,需要用大括号括住。

- ( void )imagePickerController:( UIImagePickerController  *)picker didFinishPickingMediaWithInfo:( NSDictionary *)info
{
   
  //  关闭 UIImagePickerController 控制器
    [
self  dismissViewControllerAnimated : YES  completion : nil ];
   
  NSLog ( @"%@" ,info);
   
  //  获取图片
   
  UIImage  *image = info[ UIImagePickerControllerOriginalImage ];
   
  self . imageV . image  = image;
}
- ( IBAction )upLoad
{
   
  //  创建一个管理者
   
  AFHTTPRequestOperationManager  *manger = [ AFHTTPRequestOperationManager  manager ];
   
  //  设置参数
   
  NSMutableDictionary  *params = [ NSMutableDictionary  dictionary ];
    params[
@"username" ] =  @"123" ;
    params[
@"pwd" ] =  @"123" ;
   
   
  //  设置 URL
   
  NSString  *url =  @"http://192.168.15.56:8080/MJServer/upload" ;
    [manger
  POST :url  parameters :params  constructingBodyWithBlock :^( id < AFMultipartFormData > formData) {
          
          注意:
          在发送请求之前会自动调用这个block
       
 需要在这个block中添加文件参数到formData

       
  NSData  *fileData =  UIImageJPEGRepresentation ( self . imageV . image ,  1.0 );
        [formData
  appendPartWithFileData :fileData  name : @"file"  fileName : @"image.png"  mimeType : @"image/png" ];
    }
  success :^( AFHTTPRequestOperation  *operation,  id  responseObject) {
       
  NSLog ( @" 上传成功 " );
    }
  failure :^( AFHTTPRequestOperation  *operation,  NSError  *error) {
       
  NSLog ( @" 上传失败 " );
    }];
}


注意:
1.保留照片的质量
NSData  *fileData =  UIImageJPEGRepresentation ( self . imageV . image 1.0 );

2.AFN不能监听文件的上传进度,ASI可以监听文件的上传进度。

3.需要上传的文件的具体数据
FileData : 需要上传的文件的具体数据
name :
 服务器那边接收文件用的参数名
fileName :
 (告诉服务器)所上传文件的文件名
mimeType :
 所上传文件的文件类型

NSData  *fileData =  UIImageJPEGRepresentation ( self . imageV . image ,  1.0 );
[formData
  appendPartWithFileData :fileData  name : @"file"  fileName : @"image.png"  mimeType : @"image/png" ];

4.需要上传的文件的URL路径
FileURL : 需要上传的文件的URL路径
name :
 服务器那边接收文件用的参数名
fileName :
 (告诉服务器)所上传文件的文件名
mimeType :
 所上传文件的文件类型

NSURL  *url = [[ NSBundle  mainBundle ]  URLForResource : @"itcast"  withExtension : @"txt" ];
[formData
  appendPartWithFileURL :url  name : @"file"  fileName : @"test.txt"  mimeType : @"text/plain"  error : nil ];


文章借鉴:http://blog.csdn.net/itcontend/article/details/42104777

猜你喜欢

转载自blog.csdn.net/small_years/article/details/53317839