前言
ALAsset类代表相册中的每个资源文件,可以通过它获取资源文件的相关信息还能修改和新建资源文件,ALAssetRepresentation类代表相册中每个资源文件的详细信息,可以通过它获取资源的大小,名字,路径等详细信息。
根据URL获取ALAsset
怎样根据url获取ALAsset对象
url类似于(assets-library://asset/asset.PNG?id=2EAEEF99-2C75-4484-B922-9A2F34507537&ext=PNG
)
注意这里有个坑 在ios8.1上会出现
解决方法如下
定义Block
1 | typedef void(^ZJGetALAssetBlock)(ALAsset *); |
获取方法
1 | + (void)getALAssetByNSURL:(NSURL *)url callback:(ZJGetALAssetBlock)block{ |
属性获取
1 | //获取资源图片的详细资源信息 |
判断选择的是图片还是视频
1 | let representation = alasset.defaultRepresentation() |
文件上传
ALAsset的url没法用于上传,虽然可以夺取NSData 但是这样就把数据都加载在内存中,如果是一个较大的视频文件 显然是不太合理的 所以我们可以把文件自己保存到临时的位置 进行上传
定义宏
1 | // 照片原图路径 |
定义Block
1 | typedef void(^ALAssetToNSURLBlock)(NSURL *); |
方法
1 | // 将原始图片转化为NSData数据,写入沙盒 |
用Alamofire上传
上传时附带其他参数(multipart)
但是这种方式没法得到上传进度
1 | //上传文件 |
可以获取上传进度的方式 但是没法附带其他参数
1 | Alamofire.upload(.POST, "https://httpbin.org/post", file: imagePath) |
所以例如设置用户头像等就用第一种方式
要是做文件上传就必须用第二种方式 第二种方式也能控制暂停、继续、停止等操作