iOS-上传相册图片

作者: BestVast | 来源:发表于2016-04-17 22:52 被阅读1805次

    注:用的AFNetworking版本低于3.0

    1、遵守协议UIImagePickerControllerDelegate,UINavigationControllerDelegate
    2、首先创建按钮,添加点击事件

    //点击事件
    - (void)onTapSecondCell
    {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        __weak typeof(self) weakSelf = self;
        UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"打开相机" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [weakSelf takePhoto];
        }];
        UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"打开相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [weakSelf localPhoto];
        }];
        UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [alert dismissViewControllerAnimated:YES completion:^{
                NSLog(@"取消准备照片");
            }];
        }];
        [alert addAction:action1];
        [alert addAction:action2];
        [alert addAction:action3];
        [self presentViewController:alert animated:YES completion:nil];
    }
    //打开相机
    - (void)takePhoto
    {
        UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])//相机
        {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self;
            picker.allowsEditing = YES;
            picker.sourceType = sourceType;
            
            [self presentViewController:picker animated:YES completion:^{
                NSLog(@"调取相机成功");
            }];
        }
        else{
            NSLog(@"模拟器情况下无法打开");
        }
    }
    //打开相册
    - (void)localPhoto
    {
        UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])//相册
        {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.delegate = self;
            picker.allowsEditing = YES;
            picker.sourceType = sourceType;
            [self presentViewController:picker animated:YES completion:^{
                NSLog(@"调取相册成功");
            }];
        }
        else{
            NSLog(@"相册打不开应该是出问题了");
        }
    }
    

    实现协议方法

    //当选择一张图片后进入到这个协议方法里
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
    {
        NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
        //当选择的类型是图片
        if ([type isEqualToString:@"public.image"])
        {
            //先把图片转成NSData
            UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
         
            NSData *data1;
            if (UIImagePNGRepresentation(image) == nil)
            {
                data1 = UIImageJPEGRepresentation(image, 1);
            }
            else
            {
                data1 = UIImagePNGRepresentation(image);
            }
            //图片保存的路径
            //这里将图片放在沙盒的documents文件夹中
            NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
            //文件管理器
            NSFileManager *fileManager = [NSFileManager defaultManager];
            //把刚刚图片转换的data对象拷贝至沙盒中 并保存为image.png
            [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil];
            [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data1 attributes:nil];
            //得到选择后沙盒中图片的完整路径
            NSString *filePath = [[NSString alloc]initWithFormat:@"%@%@",DocumentsPath,  @"/image.png"];
            long long abc = [self fileSizeAtPath:filePath];
            if (abc < 1024000) {
                _headerImage = image;
            }
            else {
                //如果图片尺寸过大则压缩
                UIImage *small = [Help imageWithImageSimple:image scaledToSize:CGSizeMake(image.size.width/4, image.size.height/4)];
                NSData *data;
                if (UIImagePNGRepresentation(small) == nil)
                {
                    data = UIImageJPEGRepresentation(small, 0.25);
                }
                else
                {
                    data = UIImagePNGRepresentation(small);
                }     
                [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data attributes:nil];
                _headerImage = small;
            }
            //关闭相册界面
            [picker dismissViewControllerAnimated:YES completion:^{
                NSLog(@"关闭相册界面");
            }];
            [self.tableView reloadData];
        }
    }
    //判断文件的大小
    - (long long) fileSizeAtPath:(NSString*) filePath{
        NSFileManager* manager = [NSFileManager defaultManager];
        if ([manager fileExistsAtPath:filePath]){
            return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
        }
        return 0;
    }
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        [picker dismissViewControllerAnimated:YES completion:^{
            NSLog(@"您取消了选择图片222");
        }];
    }
    

    选中图片上传

    - (void)postData
    {
        AFHTTPRequestOperationManager *manage = [AFHTTPRequestOperationManager manager];
        manage.responseSerializer = [AFHTTPResponseSerializer serializer];
        __weak typeof(self) weakSelf = self;
        [MBProgressHUD showHUDAddedTo:self.tableView animated:YES];
        [manage POST:Health_GetReportPic parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            //上传图片
            NSData *data = UIImageJPEGRepresentation(_headerImage, 1.0);
            [formData appendPartWithFileData:data name:@"report_pic_path" fileName:@"image.png" mimeType:@"png"];
    //name-->对应数据库存储的字段  
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
            if ([dict[@"message"] isEqualToString:@"数据插入成功"]) 
            {
                [MBProgressHUD hideHUDForView:self.tableView animated:YES];
                [weakSelf addAlertControllerWithMessage:@"上传成功"];
                //沙盒中图片的完整路径
                NSString *string1 = [NSHomeDirectory() stringByAppendingString:@"/Documents/image.jpg"];
                NSFileManager *fileManage = [NSFileManager defaultManager];
                [fileManage removeItemAtPath:string1 error:nil];
            }
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"%@",error.localizedDescription);
            [MBProgressHUD hideHUDForView:self.tableView animated:YES];
            [weakSelf addAlertControllerWithMessage:@"上传失败"];
        }];
    }
    

    相关文章

      网友评论

      • alelaile:兄弟 我和你写的一样 为什么后台接不到我的参数啊
        BestVast:@alelaile 不好意思刚看到,这个应该是后台的问题吧
      • 4a02187e2078:有用 感谢分享
        BestVast:@thinkwicks 谢谢:pray:
      • 呼噜ZR:先感谢下楼主分享,另外问下图片压缩的时候有个Help ,是神马?
      • BestVast:K是数值;而B是字节,KB是单位
        KB是存储空间大小的单位,1KB=1024B=1024*8bit,1024KB=1MB,1024MB=1GB
        b=bit 表示“位” ,B=Byte 表示“字节”,1 Byte=8 bit
        1024000相当于1M
      • dong_liang:long long abc = [self fileSizeAtPath:filePath];
        if (abc < 1024000) {
        _headerImage = image;
        }
        这个abc的单位是kb吗?

      本文标题:iOS-上传相册图片

      本文链接:https://www.haomeiwen.com/subject/rfkolttx.html