首先下載文件并預(yù)覽這一過(guò)程,需要由下載文件路徑浮入,存儲(chǔ)路徑龙优,預(yù)覽文件三個(gè)步驟來(lái)完成。
在賦值文件路徑和文件名的時(shí)候遇到一些麻煩,一直就打不開這個(gè)文件彤断,經(jīng)過(guò)不懈努力野舶,終于找到問(wèn)題的原因,下面分享出來(lái)給大家做參考宰衙。
注意一:
這里是從后臺(tái)獲取到的文件路徑+文件名平道,例:/upload/notice/201708/哈哈哈.doc
注意二:
這里需要的是文件名,這個(gè)文件名可以是后臺(tái)上傳的文件名供炼,也可以自己隨便起一個(gè)名字一屋,但這里的文件名涉及到預(yù)覽文件時(shí)顯示的標(biāo)題,也就是說(shuō)袋哼,這里起什么名字冀墨,在預(yù)覽文件的時(shí)候標(biāo)題就是什么。
注意三:
這里我做了一個(gè)根據(jù)文件名判斷文件是否存在的if...else語(yǔ)句涛贯。如果文件存在诽嘉,直接調(diào)用預(yù)覽文件的方法即可。
注意四:
如果文件不存在弟翘,則調(diào)用下載文件的方法虫腋,
docPath:這個(gè)參數(shù)這里是本地路徑,也就是代碼最開始的兩句稀余。
fileName:這個(gè)參數(shù)這里是獲取后臺(tái)給上傳文件的那個(gè)文件名悦冀。
注意五:
這里就是需要將下載文件的地址拼接完整
urlString = [urlString stringByAppendingString:@""];
這里@"",可以填寫文件名,根據(jù)自身需要結(jié)合后臺(tái)獲取的文件路徑拼接而定睛琳,我這里的文件名在上一句代碼中拼接完成盒蟆,這里就不需要再填寫文件名,以免造成下載路徑不對(duì)掸掏。
注意六:
這里的docPath 和?fileName跟注意四一致茁影,調(diào)用的時(shí)候賦值
注意七:
這里是下載完成的路徑
注意八:
我這里用到的預(yù)覽文件方法是UIDocumentInteractionContorller,
需要簽訂UIDocumentInteractionControllerDelegate
設(shè)置UIDocumentInteractionController代理,添加代理方法.
補(bǔ)充:預(yù)覽文件實(shí)現(xiàn)方法
我這里使用的是UIDocumentInteractionController,還可以使用QuickLook或者webView打開文件
1丧凤、UIDocumentInteractionController 和 QuickLook?不能在線預(yù)覽募闲,只能加載本地文件。
2愿待、QLPreviewController可以一起瀏覽多個(gè)文件浩螺,而UIDocumentInteractionController一次只能瀏覽一個(gè)文件。
3仍侥、使用QLPreviewController時(shí)要出,需要導(dǎo)入QuickLook.framework,并遵守其數(shù)據(jù)源和代理方法农渊。
webView預(yù)覽文件方法:
NSString *filePath = @"";//文件存儲(chǔ)地址
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];
}
//實(shí)現(xiàn)代理協(xié)議
#pragma mark-----------QLPreviewControllerDataSource
//要顯示的文件的數(shù)量
/*!
* @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{
//這個(gè)是加載的本地的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;
}