iOS App实现PDF文件下载和存储到"文件"中

在iOS中可以通过UIActivityViewController来实现文件内容的分享,包括但不限于:AirDrop(隔空送投)分享,微信/QQ/钉钉等其他途径的分享,文件打印,存储到“文件“中等,本文就主要介绍这种方式将PDF文件存储到”文件“中

如果需要把沙盒的Documents目录暴露在“文件”中,可以通过在info.plist中添加配置项

<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>

1.UIFileSharingEnabled
设置为 启用了文件共享功能。启用此选项后,您的应用会出现在 iTunes 中,用户可以通过 iTunes 将文件拖放到您的应用沙盒中,或从您的应用中将文件拖放到计算机上。这样用户可以在计算机和设备之间共享文件。

2.LSSupportsOpeningDocumentsInPlace
设置为 启用了在应用内打开文档的功能。这意味着您的应用可以处理其他应用中的文档,并允许用户在不离开您的应用的情况下直接在您的应用中打开并编辑这些文档。

下面是文件分享部分,我们就可以通过UIActivityViewController来实现应用之间文件共享了,大致思路就是发起分享动作时先判断PDF文件是否已经下载到了本地,如果已下载直接发起分享,如果未下载,先下载文件,再分享文件。在分享页面选择分享的途径,如果要分享到“文件”中,选择下面的存储到“文件”按钮,然后选择存储的路径,下次打开“文件”App时,即可看到下载的PDF文件了,以下是代码部分,仅供参考:

/// 分享pdf
-(void)sharePdf{
    /// 先查询是否已经下载如果已经下载 直接分享 如果未下载,现在pdf再分享到直接位置
    [self downloadAndShare];
}

- (void)downloadAndShare {
    /// 获取pdf名字
    NSString *pdfFileName =  self.wkWebView.URL.lastPathComponent;
    /// 查询文件是否已经存在
    if (![self pdfFileExistsWithName:pdfFileName]) {
        /// 获取下载链接
        NSURL *pdfURL = [NSURL URLWithString:self.wkWebView.URL.absoluteString];
        
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
        __weak typeof(self) weakself =self;
        NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:pdfURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
            if (error) {
                NSLog(@"PDF文件下载失败: %@", error);
            } else {
                NSString *destinationPath = [self pathForPDFFileWithName:pdfFileName];
                NSURL *destinationURL = [NSURL fileURLWithPath:destinationPath];
                NSError *moveError;
                [[NSFileManager defaultManager] moveItemAtURL:location toURL:destinationURL error:&moveError];
                if (moveError) {
                    NSLog(@"下载PDF完成移动在指定路径失败: %@", moveError);
                } else {
                    NSLog(@"PDF文件下载成功并保存到指定路径: %@", destinationURL);
                    /// 发起分享
                    [weakself startToSharePdf:pdfFileName];
                }
            }
        }];
        [downloadTask resume];
    }else{
        // 发起分享
        [self startToSharePdf:pdfFileName];
    }
}

-(void)startToSharePdf:(NSString *)pdfFileName{
    NSArray *activityItems = @[[NSURL fileURLWithPath:[self pathForPDFFileWithName:pdfFileName]]];

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:activityViewController animated:YES completion:nil];
}

- (NSString *)pathForPDFFileWithName:(NSString *)fileName {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths firstObject];
    return [documentsDirectory stringByAppendingPathComponent:fileName];
}

- (BOOL)pdfFileExistsWithName:(NSString *)fileName {
    NSString *filePath = [self pathForPDFFileWithName:fileName];
    return [[NSFileManager defaultManager] fileExistsAtPath:filePath];
}
posted @ 2023-07-28 10:07  qqcc1388  阅读(3302)  评论(0)    收藏  举报