热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

坎坷的上传图片流到服务器(AFN方法)(多张图片)(图片流)

昨天遇到一个棘手问题(呵呵呵),就是上传图片流到服务器,首先AFN是有现成的方法的,总之试了一路..各种三方方法,还有自己写,,,,,,最后的原因是后台给我的接口文档是错的URL少了

昨天遇到一个棘手问题(呵呵呵), 就是上传图片流到服务器, 首先AFN是有现成的方法的, 总之试了一路.....各种三方方法,还有自己写,,,,,,最后的原因是后台给我的接口文档是错的URL少了三个字母…导致我已连接服务器就404   …….啥也不说了整个上传步骤如下TT





第一步//获取图片

  

    UIAlertController *actiOnSheet= [UIAlertController alertControllerWithTitle:@"添加照片" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

    

    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {

        [actionSheet dismissViewControllerAnimated:YES completion:^{

            

            

            

        }];

    }];

    

    

    UIAlertAction *PhotoAlbum = [UIAlertAction actionWithTitle:@"从相册获取" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

       

        [self reloadImagesFromLibrary];

        

        

    }];

    

    UIAlertAction *camera = [UIAlertAction actionWithTitle:@"从摄像头获取" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

       

        UIImagePickerController *picker = [[UIImagePickerController alloc] init];

        

        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

            

            picker.sourceType = UIImagePickerControllerSourceTypeCamera;

            

            NSArray *temp_MediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType];

            

            picker.mediaTypes = temp_MediaTypes;

            

            picker.delegate = self;

            

            picker.allowsEditing = YES;

            

        }

        

        

        [self presentViewController:picker animated:YES completion:^{

            

        }];

        

        

    }];

    

    [actionSheet addAction:PhotoAlbum];

    [actionSheet addAction:camera];

    [actionSheet addAction:cancel];

    

    

   [self presentViewController:actionSheet animated:YES completion:^{

       

   }];




//这个是调用摄像头的回调方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    

    [self dismissViewControllerAnimated:YES completion:nil];


    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    

    [self.frontIDCard setImage:[image imageWithRenderingMode:1] forState:UIControlStateNormal];


    //因为要上传多张照片所以放到一个数组里 (要注意控制图片的尺寸和质量)

    [self.postImageArr addObject:[self image:image byScalingToSize:CGSizeMake(400, 800)]];

   

}


//这个是选取拍摄的照片的方法

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

    

    [picker dismissViewControllerAnimated:YES completion:^{

        

    }];

}


//更改图片大小

- (UIImage *)image:(UIImage*)image byScalingToSize:(CGSize)targetSize {

    UIImage *sourceImage = image;

    UIImage *newImage = nil;

    

    UIGraphicsBeginImageContext(targetSize);

    

    CGRect thumbnailRect = CGRectZero;

    thumbnailRect.origin = CGPointZero;

    thumbnailRect.size.width  = targetSize.width;

    thumbnailRect.size.height = targetSize.height;

    

    [sourceImage drawInRect:thumbnailRect];

    

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    return newImage ;

}


//传图片流

- (void)postImages {

    


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.respOnseSerializer= [AFHTTPResponseSerializer serializer];

    

  

    [manager POST:Period parameters:nil constructingBodyWithBlock:^(id formData)

     {

         // 上传 多张图片

         for(NSInteger i = 0; i

        

             

             NSData * imageData = UIImageJPEGRepresentation([self.postImageArr objectAtIndex: i], 0.5);

             // 上传的参数名

             

             NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

             formatter.dateFormat = @"yyyyMMddHHmmss";

             NSString *str = [formatter stringFromDate:[NSDate date]];

             NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];

             [formData appendPartWithFileData:imageData name:str fileName:fileName mimeType:@"image/jpeg"];

         }

     }

          success:^(AFHTTPRequestOperation *operation, id responseObject)

     {

         

         NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

         NSLog(@"完成 %@", result);

     }

          failure:^(AFHTTPRequestOperation *operation, NSError *error)

     {

         NSLog(@"错误 %@", error.localizedDescription);

     }];

   

    

 }





推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
author-avatar
玲子0909_366
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有