第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

ios總結(jié)筆記 -- 下載預(yù)覽pdf/word/png/doc/xls/docx...文件

標(biāo)簽:
iOS

直接上代码
DownLoadManager.h

@interface DiskDownLoadManager : NSObject

@property (nonatomic,copy) void(^checkDiskFile)(NSString *);

+(instancetype)shareManager;

- (BOOL)getFile:(DiskItemModel *)model;

///预览文档
- (void)checkFileDisk:(DiskItemModel *)model;

@end

DownLoadManager.m


+(instancetype)allocWithZone:(struct _NSZone *)zone
{
    //    @synchronized (self) {
    //        // 为了防止多线程同时访问对象,造成多次分配内存空间,所以要加上线程锁
    //        if (_instance == nil) {
    //            _instance = [super allocWithZone:zone];
    //        }
    //        return _instance;
    //    }
    // 也可以使用一次性代码
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (_instance == nil) {
            _instance = [super allocWithZone:zone];
        }
    });
    return _instance;
}
// 为了使实例易于外界访问 我们一般提供一个类方法
// 类方法命名规范 share类名|default类名|类名
+(instancetype)shareManager
{
    //return _instance;
    // 最好用self 用Tools他的子类调用时会出现错误
    return [[self alloc]init];
}
// 为了严谨,也要重写copyWithZone 和 mutableCopyWithZone
-(id)copyWithZone:(NSZone *)zone
{
    return _instance;
}
-(id)mutableCopyWithZone:(NSZone *)zone
{
    return _instance;
}

///预览文档
- (void)checkFileDisk:(DiskItemModel *)model
{
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    NSString *headerPath = [NSString stringWithFormat:@"%@/%@/%@/",path,@"MyDisk",@"ziliao"];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *filePath = [headerPath stringByAppendingPathComponent:model.dataName]; //docPath为文件名

    if (![fileManager fileExistsAtPath:filePath]) {
        if (![fileManager fileExistsAtPath:headerPath]) {
            [fileManager createDirectoryAtPath:headerPath withIntermediateDirectories:YES attributes:nil error:nil];
        }
        [self downloadDocxWithFilePath:filePath dataId:model.dataId];
    }else{//文件已下载的情况下,直接回调,参数是文件路径
        if (_checkDiskFile) {
            _checkDiskFile(filePath);
        }
    }
}
/**
 下载文件

 @param docPath 文件路径
 @param fileName 文件名
 */
-(void)downloadDocxWithFilePath:(NSString *)filePath dataId:(NSString *)dataId {
//下载文件通常用的方法,自己另行配置,下面的文件下载只是针对接口,我觉得并不好
    NSString *urlString = APIBASE;
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:[NSURL URLWithString:APIBASE]];
    manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects: @"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/plain",nil];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析
    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSDictionary *parameters = @{@"dataIds":dataId};

    NSURLSessionDataTask *task = [manager POST:API_DiskDownLoad parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        BOOL result = [fileManager createFileAtPath:filePath contents:(NSData *)responseObject attributes:nil];
        if (result) {
           NSLog(@"============写入成功");
            //文件已经存在,直接打开
            if (_checkDiskFile) {
                _checkDiskFile(filePath);
            }
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

    }];
    [task resume];//开始下载 要不然不会进行下载的

}

要打开的地方

/**
 打开文件

 @param filePath 文件路径
 */
-(void)openDocxWithPath:(NSString *)filePath {

    UIDocumentInteractionController *doc= [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
    doc.delegate = self;
    [doc presentPreviewAnimated:YES];
}

#pragma mark - UIDocumentInteractionControllerDelegate
//必须实现的代理方法 预览窗口以模式窗口的形式显示,因此需要在该方法中返回一个view controller ,作为预览窗口的父窗口。如果你不实现该方法,或者在该方法中返回 nil,或者你返回的 view controller 无法呈现模式窗口,则该预览窗口不会显示。

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

    return self;
}

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

    return self.view;
}

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

    return CGRectMake(0, 30, kSCREEN_WIDTH, kSCREEN_HEIGHT);
}
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消