最近做的项目 , 在我看来都停偏的 , 因为需要的都不仅仅是展示和业务逻辑 , 而主要都是网络和存储,文件,流媒体操作方面的东西 . 所以今天想要获取下照片的名称 , 还找了挺久的 . 以此记录下 , 直接上代码 .
首先让当前控制器遵循 UINavigationControllerDelegate,UIImagePickerControllerDelegate 这两个协议 , 并实现其方法 , 用于打开相册并选择照片
//打开相册
- (void)uploadPhoto
{
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
//设置当前控制器为picker对象的代理
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
}
}
代理方法
//获取照片信息
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
//获取图片的名称
//获取
NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
//导入 #import <AssetsLibrary/AssetsLibrary.h> 库
//创建 ALAssetsLibrary 对象
ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
[library assetForURL:url resultBlock:^(ALAsset *asset){
//获取图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
//获取照片名称
NSString *fileName = asset.defaultRepresentation.filename;
//获取照片元数据 ,包含一些RGB什么的
NSString *fileName = asset.defaultRepresentation.metadata;
//获取照片大小比例等等... defaultRepresentation的属性中可以查看
....
//开始上传 (此方法无视 , 这是项目中需要的方法)
[JYCenterAddUploadManager executeUpLoadFileWithFile:image fileParent:@"root" fileName:fileName fileType:JYUpLoadFileTypeImage response:^(JYDownLoadTaskModel *taskModel) {
}];
}failureBlock:^(NSError *error){
[NSObject alertShowWithSingleTipWithtarget:self title:@"获取相册失败" makeSureClick:nil];
}];
[picker dismissViewControllerAnimated:YES completion:nil];
}
尤其需要注意的是: 苹果为了保护用户隐私 , 我们开发者是拿不到相册里视频和照片的路径的 , 此路径是指物理路径 , 而并非上述的URL