首页 > 代码库 > iOS 相机上传图片给服务器
iOS 相机上传图片给服务器
本人做iOS还不是很久,第一个遇到棘手的问题就是相机上传图片给服务器,明明相册上传一点问题都没有,可是相册每次都不行。
以下代码原理:既然相册可以,为什么相机不行,是因为得不到UIImagePickerControllerReferenceURL ,因为相机和相册所得到的info是不一样的,所以我为了得到这个UIImagePickerControllerReferenceURL键值,我把拍的照片用代码存到相册里面,再取出来用就可以啦。虽然这个方法有点傻,但是也费了我很长时间的。
不多说,贴代码。
//拍照- (void)takePhoto { if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSLog(@"该设备不支持拍照,请你买新设备"); return; } UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; imagePicker.delegate = self; //资源类型 imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; //是否允许编辑 imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:nil];}
然后支持协议UIImagePickerControllerDelegate和UINavigationControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { UIImage *image = [[UIImage alloc]init]; NSURL *imageURL = [[NSURL alloc]init]; __block NSString *imageFileName; if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { image = [info objectForKey:UIImagePickerControllerOriginalImage]; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error) { if (error) { NSLog(@"%@",error.localizedDescription); }else { NSLog(@"assetURL %@",assetURL); ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) { ALAssetRepresentation *representation = [myasset defaultRepresentation]; imageFileName = [representation filename]; NSLog(@"imageFileName=%@",imageFileName); NSData *imgData = http://www.mamicode.com/UIImageJPEGRepresentation(image,0); AFHTTPSessionManager * manager = [AFHTTPSessionManager manager]; [manager POST:getImagePathUrls parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { if (imgData!= nil) { [formData appendPartWithFileData:imgData name:@"upload_file" fileName:imageFileName mimeType:@"image/*"]; } } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@",responseObject); NSString *string = responseObject[@"alldata"]; responseObject = [[EncryptionTools sharedEncryptionTools]decryptString:string keyString:@"d2VuZGFjcC4zMTU4LsmNus" iv:nil]; NSDictionary *dic = [self jsonStringToObject:responseObject]; NSString *imgPath = dic[@"data"][@"path"]; [self.requestImgArr addObject:imgPath]; [self.tableView reloadData]; //在这里可以把刚存的图片删除 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"%@",error.localizedDescription); }]; }; ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; [assetslibrary assetForURL:assetURL resultBlock:resultblock failureBlock:nil]; } }]; } [picker dismissViewControllerAnimated:YES completion:nil]; [self.tableView reloadData];}
写的不是很明白,希望对你有点帮助
iOS 相机上传图片给服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。