iOS 文件下载保存预览功能实现

文章详细介绍了如何在iOS应用中实现文件下载,包括下载进度跟踪、文件保存到沙盒以及如何将文件保存到系统‘文件’APP中。此外,还讨论了两种不同的保存策略,并提供了使用UIDocumentInteractionController进行文件预览的方法。
摘要由CSDN通过智能技术生成

iOS 文件下载保存预览功能实现

一、文件下载

//urlString:文件资源路径
- (void)downloadFileWithUrl:(NSString *)urlString
                    success:(ApiSuccess)success
                    failure:(ApiFailure)failure
{

    //获取本地路径:即文件下载后需要存储的路径
    NSString * directory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString * fileName = [urlString componentsSeparatedByString:@"/"].lastObject;
    NSString * loacalPath = [directory stringByAppendingPathComponent:fileName];
    
    //资源路径编码:防止路径中含有中文
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
    
    //下载请求
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    NSURLSessionDownloadTask * task = [self downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        NSLog(@"下载进度:%lld / %lld", downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        //设置下载后需要存储的路径,targetPath:下载时存储的临时路径
        return [NSURL fileURLWithPath:loacalPath];
        
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        NSLog(@"下载后存储的路径:%@",[filePath path]);
        if (error) {
            failure(@"下载失败");
            NSLog(@"requestUrl:%@ error:%@", urlString, error);
        }else{
            success([filePath path], YES, @"下载成功");
        }
    }];
    [task resume];
    
    //该方法根据一个resumeData来进行断点下载。在下载cancel或者suspend的时候通过cancelByProducingResumeData方法将当前的resumeData值写入本地plist文件,下次下载的时候从本地plist取出resumeData信息,再通过downloadTaskWithResumeData进行下载就可以了。
    //self downloadTaskWithResumeData:<#(nonnull NSData *)#> progress:<#^(NSProgress * _Nonnull downloadProgress)downloadProgressBlock#> destination:<#^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response)destination#> completionHandler:<#^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error)completionHandler#>
    
}

参考链接:

1、iOS下载word等文件并预览 - 简书

二、保存到系统文件APP

文件下载后默认是保存到我们设置的沙盒路径,用户是没办法找到该文件的,如果要在系统“文件”APP(也叫“files” app)中看到该文件,有两种方式。

方式1:在info.plist文件中添加两个键值对,第一个是 UIFileSharingEnabled,这个可以使 iTunes 分享你文件夹内的内容;第二个是 LSSupportsOpeningDocumentsInPlace ,它保证了你文件夹内本地文件的获取权限,你需要将这两个键值对的值设置为 YES 。如图:

再运行程序,打开系统中“文件”的app,就可以获取就可以在 Files 里面 我的 iPhone 中看到以你项目名为文件夹名的文件夹(如果你在 Files 中看不到 我的 iPhone这一项,你只需要在照片中选中一张照片共享到 Files 里面,就可以看到这一项了)。

但这种方式会将沙盒内 Documents 文件夹内的所有文件都显示出来,因此对一些私密的文件来说是不安全的,那么应该如何处理这些私密文件呢?

这个取决于它的重要性,如果它不是那么重要的,我们可以将它们存放在 cachesDirectory 或者是 temporaryDirectory 文件夹下面;如果它是重要的文件,大多数情况下,我们是需要将它们备份在 iCloud 上的,这样的文件我们建议将它存放在 applicationSupportDirectory 目录下,这样用户就看不到了。

方式2:使用UIDocumentInteractionController弹出文件控制器,在选择存储到文件,有针对性的存储保存文件到“文件”APP,这样私密文件就不会暴露出去了。

如果不能存储,试试在info.plist中添加“Supports Document Browser”键值,值为YES,我是没有添加直接就可以了。

文件控制器如图:

弹出代码如下:

@interface FileTestViewController ()

//这里一定要将_documentController设为全局变量,否则无法正常使用
@property (nonatomic, strong) UIDocumentInteractionController *documentController;

@end


@implementation FileTestViewController

//保存文件
- (void)clickToSave
{
    _documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
    [_documentController presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
}

@end

参考链接:

【链接】iOS-对接系统自带“File”app即(文件)app的实
https://blog.csdn.net/lyz0925/article/details/104460366

三、文件预览

可以使用UIDocumentInteractionController、QuickLook或者webView打开文件。

1、UIDocumentInteractionController 和 QuickLook 不能在线预览,只能加载本地文件。

2、QLPreviewController可以一起浏览多个文件,而UIDocumentInteractionController一次只能浏览一个文件。

3、使用QLPreviewController时,需要导入QuickLook.framework,并遵守其数据源和代理方法。

参考:iOS 文件预览的四种方法 - 简书

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 前端的uinapp是一种跨平台的移动应用开发框架,可以用于实现iOS视频剪辑功能。 要使用uinapp实现iOS视频剪辑,可以采用以下步骤: 1. 首先,需要使用uinapp框架的相关组件来构建界面,包括按钮、文本框、进度条等。可以使用调试工具将这些组件放置在合适的位置,并为它们添加相应的事件处理函数。 2. 接下来,需要在界面上添加视频选择的功能。可以使用组件或者原生API来实现。用户可以通过点击按钮或者拖拽方式选择视频文件。 3. 一旦选择了视频文件,需要先将视频文件上传到服务器进行处理。可以使用HTTP请求将视频文件发送到服务器,并在前端界面上显示上传的进度。 4. 上传完成后,服务器会返回一个视频处理的任务ID。前端需要通过定时轮询或者WebSocket等方式向服务器查询任务的状态。可以在界面上显示任务的进度,并提供取消任务的功能。 5. 当视频处理任务完成时,服务器会将处理后的视频文件发送回前端。前端可以将视频文件保存到本地,并在界面上显示视频的封面和时长信息。 6. 最后,需要添加视频剪辑的功能。可以使用组件或者原生API来实现。用户可以通过拖拽方式选择需要剪辑的区域,并通过界面上的按钮来确认和保存剪辑结果。 综上所述,使用前端的uinapp框架可以实现iOS视频剪辑功能。通过界面的构建、视频选择、上传和处理、任务查询、视频剪辑等步骤,可以完成视频剪辑的操作,并在前端界面上显示相关信息和进度。 ### 回答2: 前端uinapp是一种开发工具,可用于实现iOS视频剪辑功能iOS视频剪辑的主要目标是允许用户在手机上编辑和修改视频内容,包括裁剪、旋转、添加滤镜和转场效果、调整音频等操作。 在前端uinapp中实现iOS视频剪辑可以按照以下步骤进行: 1. 创建界面:使用前端uinapp的界面组件,设计一个用户友好的界面,包括视频预览窗口、时间轴、编辑工具栏等。 2. 导入视频:提供用户导入视频的功能,可以通过调用iOS原生接口,让用户选择要编辑的视频文件,并将其导入前端uinapp中。 3. 裁剪视频:允许用户在时间轴上选择起始和结束时间点,然后对视频进行裁剪。可以使用前端uinapp的视频处理组件,调整视频的播放范围,剔除不需要的部分。 4. 添加滤镜和转场效果:提供一系列滤镜和转场效果供用户选择,并应用到视频中。这可以通过调用您选择的滤镜和效果的API来实现。 5. 调整音频:允许用户对视频的音频进行调整,包括音量、混音等参数的调整。可以使用前端uinapp的音频处理组件,使用户能够更改视频的音频部分。 6. 预览和导出:在界面中提供预览功能,用户可以预览编辑后的视频,确保满足预期效果。一旦满意,用户可以选择导出编辑后的视频,可以使用iOS原生接口导出视频文件。 总结起来,前端uinapp可以通过界面设计、视频导入、裁剪、滤镜和效果应用、音频调整、预览和导出等功能实现iOS视频剪辑的要求。通过这些步骤,用户可以自由地编辑和修改自己的视频内容,制作出满意的剪辑作品。 ### 回答3: 前端 UINAPP 是一种用于移动应用开发的前端框架,可以用于实现 iOS 视频剪辑功能。 首先,在 iOS 系统中,可以使用 AVFoundation 框架来处理视频和音频。我们可以通过 UINAPP 的前端界面来获取用户选择的视频文件,并将其传递给后端进行处理。 在 UINAPP 中,可以使用 HTML5 的 video 元素来显示视频内容,并通过 JavaScript 控制视频播放。用户可以通过点击界面上的剪辑按钮选择视频的起始和结束时间,并通过 JavaScript 将剪辑的时间参数传递给后端。 接下来,后端可以使用 AVFoundation 框架来剪辑视频。通过 AVAsset 和 AVAssetExportSession 类,我们可以实现视频的剪辑和导出功能。根据前端传递的剪辑时间参数,可以使用 AVAsset 类的 timeRange 属性对视频进行裁剪,然后使用 AVAssetExportSession 类将裁剪后的视频导出为新的文件。 最后,后端可以将处理好的剪辑视频文件返回给前端,前端通过 UINAPP 的界面将剪辑后的视频显示给用户。 总结起来,前端 UINAPP 可以实现 iOS 视频剪辑功能的具体步骤如下: 1. 在前端界面中显示视频,并通过 JavaScript 控制视频播放。 2. 用户通过界面按钮选择视频的起始和结束时间。 3. 前端将选择的时间参数传递给后端。 4. 后端使用 AVFoundation 框架对视频进行剪辑。 5. 后端将剪辑后的视频返回给前端。 6. 前端通过 UINAPP 的界面将剪辑后的视频显示给用户。 通过这样的步骤,可以实现在前端 UINAPP 中实现 iOS 视频剪辑的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值