很多项目中都会遇到附件下载功能,尤其工具类APP ,这篇文章简单介绍了下载预览功能
下载功能
/**
下载附件
@param fileName 文件名
*/
-(void)downloadFileWithFileName:(NSString *)fileName {
[MBProgressHUD showHUDAddedTo:self.view animated:YES];
/* 创建网络下载对象 */
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSString *urlString = imageBaseURL;
urlString = [urlString stringByAppendingString:fileName];
/* 下载地址 */
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
/* 下载路径 */
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"];
NSString *filePath = [path stringByAppendingPathComponent:url.lastPathComponent];
/* 开始请求下载 */
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
DebugLog(@"下载量:%.0f%", downloadProgress.fractionCompleted * 100);
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
/* 设定下载到的位置 */
return [NSURL fileURLWithPath:filePath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
[MBProgressHUD showInView:self.view tip:@"下载完成,正在打开" autoHid:YES];
DebugLog(@"下载完成");
DebugLog(@"%@",filePath);
NSString *name = [filePath path];
[self openFileWithPath:name];
}];
[downloadTask resume];
}
预览
楼主用的WKWebView,当然还有其他办法
WKWebViewViewController *momentVC = [[WKWebViewViewController alloc]init];
momentVC.urlString = filePath;
momentVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController: momentVC animated:NO];
url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",self.urlString]];
点击下载按钮判断是否已经下载过了
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths lastObject];
NSFileManager *fileManager = [NSFileManager defaultManager];
/* 下载路径 */
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"];
NSString *filePath = [path stringByAppendingPathComponent: vc.ulr.lastPathComponent];
if ([fileManager fileExistsAtPath:filePath]) {
//文件已经存在,直接打开
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"文件已经存在,是否直接打开" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * cancelAction =[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:cancelAction];
[alertController addAction:[UIAlertAction actionWithTitle:@"是" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
[self openFileWithPath:filePath];
}]];
[alertController.actions setValue:[UIColor colorWithHexString:@"3998ef"] forKey:@"_titleTextColor"];
[self presentViewController:alertController animated:YES completion:nil];
}else {
//文件不存在,要下载
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"是否进行下载并打开打开文件" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * cancelAction =[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:cancelAction];
[alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
[self downloadFileWithDocPath:documentsDirectory fileName: self.strUrl];
}]];
[self presentViewController:alertController animated:YES completion:nil];