iOS文件下载 存储在手机文件夹浏览

产品需求 实现PDF文件下载既能在线浏览 又能从手机的文件夹打开。

首先实现在线浏览有很多方法。如 自定义VC 与view实现 或者  UIWebView / WKWebView 或者利用系统自带的UIDocumentPickerViewController  都可以实现,但是要实现在手机的文件里打开,这个是第一次遇到,之前没有做过这方面的需求,于是有了调研。

 首先想到的是 给用户文件下载的URL 在Safari操作。这是基于iPhone手机本身的机制。但显然这是不满足产品需求的,于是查资料,看到了系统自带的UIDocumentInteractionController

UIDocumentInteractionController 

 主要作用

1).预览类似pdf、doc、ppt等类型文件的类。

2).可以将用户接收到的文件分享到用户手机上的其他App中。

使用方法

```

@property (nonatomic, strong) UIDocumentInteractionController *DIController;

1)签代理 UIDocumentInteractionControllerDelegate

2)初始化 

NSString*load_url = @""; //下载完成后的URL

 self.DIController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL URLWithString:load_url]];

  self.DIController.delegate=self;

   [self.DIController presentPreviewAnimated:YES];

3)实现代理方法

#pragma mark - UIDocumentInteractionControllerDelegate

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {

    return self.downloadVC;

}

- (UIView*)documentInteractionControllerViewForPreview:(UIDocumentInteractionController*)controller {

    return self.downloadVC.view;

}

- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController*)controller {

    return self.downloadVC.view.frame;

}

```

下载文件的方法

#pragma mark- 下载文件

```

-(NSURLSessionTask *)downloadWithURL:(NSString *)URL

                             fileDir:(NSString*)fileDir

                            progress:(void(^)(NSProgress*progress))progress

                             success:(void(^)(NSString*filePath))success

                             failure:(void(^)(NSError*error))failure{

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]];

    NSURLSessionDownloadTask*downloadTask = [managerdownloadTaskWithRequest:requestprogress:^(NSProgress*_NonnulldownloadProgress) {

        //下载进度

        progress ? progress(downloadProgress) :nil;

        TSLog(@"下载进度:%.2f%%",100.0*downloadProgress.completedUnitCount/downloadProgress.totalUnitCount);

    }destination:^NSURL*_Nonnull(NSURL*_NonnulltargetPath,NSURLResponse*_Nonnullresponse) {


        //拼接缓存目录

        NSString *downloadStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] ;

        //拼接文件路径

        NSString*filePath = [downloadStrstringByAppendingPathComponent:fileDir];

        return[NSURLfileURLWithPath:filePath];


    }completionHandler:^(NSURLResponse*_Nonnullresponse,NSURL*_NullablefilePath,NSError*_Nullableerror) {

        success&&filePath ? success(filePath.absoluteString/** NSURL->NSString*/) :nil;

        failure && error ? failure(error) :nil;

    }];

    //开始下载

    [downloadTaskresume];

    returndownloadTask;

}

```

此时就完成PDF文件下载完后预览 如下图 

点击右上角的按钮会弹出如下图的弹框 点击save to files  就可以把下载好的文件存储到手机的文件夹里

当然这只是一个 大概的实现过程,其中有些细节可以根据产品需求来完善。如下载的名称  存储在文件夹里可以归类等等

你可能感兴趣的:(iOS文件下载 存储在手机文件夹浏览)