因最近项目上提出上传iPhone文件的需求,所以开始探索该方面的实现流程,凭借着直觉,进行了简单的代码探索,没想到真的有UIDocument相关的类,就误打误撞的开始了探索旅程~
下面是简单实现,具体的需要参照项目实际需求进行开发
文件上传
首先需要导入代理,因为我们需要通过回调来获取我们所选取文件的路径<UIDocumentPickerDelegate>
其次就是实现了,直接上代码
UIDocumentPickerViewController *documentPickerViewController =
//此处为iOS14以前的实现方法,官方建议iOS14之后使用 initForOpeningContentTypes:asCopy: 或 initForOpeningContentTypes: instead 其中的一个方法
[[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.item"] inMode:UIDocumentPickerModeOpen];
documentPickerViewController.delegate=self;
[selfpresentViewController:documentPickerViewControlleranimated:YEScompletion:nil];
代理实现获取到的是路径,如需上传则需要将文件转换为二进制上传
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
NSData*fileData = [NSDatadataWithContentsOfFile:urls[0]];
NSLog(@"获取到的文件二进制数据:%@",fileData);
}
文件下载
ios文件下载需要借助系统分享来进行实现,具体代码如下
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@""]];
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:@[data] applicationActivities:nil];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:avc animated:YES completion:nil ];
avc.completionWithItemsHandler= ^(UIActivityType__nullableactivityType,BOOLcompleted,NSArray*__nullablereturnedItems,NSError*__nullableactivityError) {
if(completed ==YES) {
//可根据不同的分享路径断点查看,按需提示即可
if ([activityType isEqualToString:@"com.apple.DocumentManagerUICore.SaveToFiles"]) {
NSLog(@"保存到文件成功");
}
}else{
}
};