iOS下载word等文件并预览

2017-11-22  本文已影响30人  肉肉要次肉

首先下载文件并预览这一过程,需要由下载文件路径,存储路径,预览文件三个步骤来完成。

在赋值文件路径和文件名的时候遇到一些麻烦,一直就打不开这个文件,经过不懈努力,终于找到问题的原因,下面分享出来给大家做参考。

注意一:

这里是从后台获取到的文件路径+文件名,例:/upload/notice/201708/哈哈哈.doc

注意二:

这里需要的是文件名,这个文件名可以是后台上传的文件名,也可以自己随便起一个名字,但这里的文件名涉及到预览文件时显示的标题,也就是说,这里起什么名字,在预览文件的时候标题就是什么。

注意三:

这里我做了一个根据文件名判断文件是否存在的if...else语句。如果文件存在,直接调用预览文件的方法即可。

注意四:

如果文件不存在,则调用下载文件的方法,

docPath:这个参数这里是本地路径,也就是代码最开始的两句。

fileName:这个参数这里是获取后台给上传文件的那个文件名。

注意五:

这里就是需要将下载文件的地址拼接完整

urlString = [urlString stringByAppendingString:@""];

这里@"",可以填写文件名,根据自身需要结合后台获取的文件路径拼接而定,我这里的文件名在上一句代码中拼接完成,这里就不需要再填写文件名,以免造成下载路径不对。

注意六:

这里的docPath 和 fileName跟注意四一致,调用的时候赋值

注意七:

这里是下载完成的路径

注意八:

我这里用到的预览文件方法是UIDocumentInteractionContorller,

需要签订UIDocumentInteractionControllerDelegate

设置UIDocumentInteractionController代理,添加代理方法.

补充:预览文件实现方法

我这里使用的是UIDocumentInteractionController,还可以使用QuickLook或者webView打开文件

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

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

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

webView预览文件方法:


NSString *filePath = @"";//文件存储地址

NSURL *url = [NSURL fileURLWithPath:filePath];

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, kDeviceWidth, kDeviceHeight)];

[webView loadRequest:[NSURLRequest requestWithURL:url]];


QuickLook打开文件方法:


#import "ViewController.h"

#import

@interface ViewController ()

@property (nonatomic,strong) QLPreviewController *previewVC;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

self.previewVC = [[QLPreviewController alloc] init];

self.previewVC.dataSource = self;

[self presentViewController:self.previewVC animated:YES completion:nil];

}

//实现代理协议

#pragma mark-----------QLPreviewControllerDataSource

//要显示的文件的数量

/*!

* @abstract Returns the number of items that the preview controller should preview.

* @param controller The Preview Controller.

* @result The number of items.

*/

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{

return 3;

}

- (id )previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{

//这个是加载的本地的pdf的文件,doc的同理

NSString *path;

switch (index) {

case 0:

{

path = [[NSBundle mainBundle] pathForResource:@"testDoc" ofType:@"docx"];

}

break;

case 1:

{

path = [[NSBundle mainBundle] pathForResource:@"testDoc" ofType:@"pages"];

}

break;

case 2:

{

path = [[NSBundle mainBundle] pathForResource:@"testDoc" ofType:@"pdf"];

}

break;

default:

break;

}

NSURL *url = [NSURL fileURLWithPath:path];

return url;

}

上一篇下一篇

猜你喜欢

热点阅读