+ (void)downLoadPdf:(NSString *)url pdf_id:(NSString *)pdf_id block:(APIFilePath)pdfFilePath {
    NSMutableDictionary *mPdf_dic = [NSMutableDictionary dictionaryWithDictionary:[Tool getLocalKey:PDFLOCAL_DIC]];
    NSURL *URL = [NSURL URLWithString:url];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
   
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
   
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
       
        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        NSLog(@"###%@", targetPath);  //原始文件
        NSLog(@"**%@", [response suggestedFilename]);  //文件名
        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
       
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"File downloaded to: %@", filePath);//下载成功后本地保存id以及文件路径
        NSString *stringUrl = [filePath absoluteString];
        mPdf_dic[pdf_id] = stringUrl;
        NSDictionary *pdfDic = [NSDictionary dictionaryWithDictionary:mPdf_dic];
        [Tool saveLocalvalue:pdfDic key:PDFLOCAL_DIC];
        pdfFilePath(stringUrl);
    }];
    [downloadTask resume];
}
 
*********************************************************************************************
查看文档时判断本地是否已经下载
#pragma mark - read
- (void)read {
    //本地已下载pdf文件
    NSDictionary *pdfDic = [Tool getLocalKey:PDFLOCAL_DIC];
    if (pdfDic == nil) {
        [Tool saveLocalvalue:pdfDic key:PDFLOCAL_DIC];
    }
    //文件路径
    NSString *filePathLocal;
    NSString *fileUrl = @"pdf的URL";
    NSString *fileKey = @"1471509244417_1471509259460";
    NSArray *keys = [pdfDic allKeys];
    BOOL isDownload = NO; //是否已经下载
    for (NSString *key in keys) {
        if ([key isEqualToString:fileKey]) {
            isDownload = YES;
            break;
        } else {
            isDownload = NO;
        }
    }
    if (isDownload) {
        filePathLocal = pdfDic[fileKey];
        [self openPdf:filePathLocal];
    } else {
         [WYAPI downLoadPdf:fileUrl pdf_id:fileKey block:^(NSString *filePath) {
             [self openPdf:filePath];
         }];
    }
}

iOS AFNetWorking 下载pdf文档的更多相关文章

  1. C#(MVC) Word 替换,填充表格,导出并下载PDF文档

    近期做一个关于C# 操作 Word 模板 文档的功能模块,查阅资料,最终完美完成任务,记录下来,以便后面还会用到.

  2. java实现从url路径中下载pdf文档到本地

    package com.cellstrain.icell.util; import java.io.*;import java.net.*; public class DownloadPdf { /* ...

  3. 如何教你在NIPS会议上批量下载历年的pdf文档(另附04~14年NIPS论文下载链接)

    如何获得NIPS会议上批量下载的链接? NIPS会议下载网址:http://papers.nips.cc/ a.点击打开上述网站,进入某一年的所有会议,例如2014年,如下图 b.然后对着当前网页点击 ...

  4. opencart 3添加pdf文档下载功能

    opencart 3适合做外贸商城,如果能在产品页那边添加pdf文档功能是最好的,符合国外用户的使用习惯,增加客户的黏性.其实opencart已经有一个downloadable product可下载产 ...

  5. 下载网页中的 pdf 各种姿势,教你如何 carry 各种网页上的 pdf 文档。

    关联词: PDF 下载 FLASH 网页 HTML 报告 内嵌 浏览器 文档 FlexPaperViewer swfobject. 这个需求是最近帮一个妹子处理一下各大高校网站里的 PDF 文档下载, ...

  6. 一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档

    接触Power BI的时间也只有几个月,虽然花的时间不多,但通过各种渠道了解收集,谈不上精通,但对一些重要概念和细节还是有所了解.在整理官方文档的过程中,也熟悉和了解了很多概念.所以从前到后把微软官方 ...

  7. 我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档

    安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...

  8. C# 复制PDF页面到另一个PDF文档

    C# 复制PDF页面到另一个PDF文档 有时候我们可能有这样一个需求,那就是把PDF页面从一个PDF文档复制到另一个PDF文档中.由于PDF文档并不像word文档那样好编辑,因此复制也相对没有那么容易 ...

  9. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

随机推荐

  1. Codeforces Round #229 (Div. 2) C

    C. Inna and Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. 百度地图API示例之设置地图最大、最小级别

    代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...

  3. 用vector容器代替数组 ——使用数组初始化vector对象

    在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int ...

  4. iframe的用法

    iframe 元素会创建包含另外一个文档的内联框架(即行内框架). 属性: 创建内联框架(JSP页面) <%@ page language="java" import=&qu ...

  5. git服务器的搭建

    http://blog.jobbole.com/25944/ 1,概念 git服务器:就是一个仓储,一个大家都可以访问的公共仓储,大家可以从这个仓储中拉取和推送数据. 协议: 与gist服务通讯的仓储 ...

  6. (转)MVC,MVP 和 MVVM 的图示

    作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...

  7. window的git extensions保存密码

    git extensions每次pull与push均要输入密码,为解决该问题,执行以下操作: win+r,在运行中输入:%USERPROFILE% 找到其中的.gitconfig文件,找到[crede ...

  8. Elasticsearch refresh vs. flush【转载】

    源地址:    http://www.jianshu.com/p/0e9f6346f1fe 问: 若一个新的文档索引进ES索引,则它在索引操作执行后约1s可以搜索到.然而我们可以直接调用_flush或 ...

  9. temp--test audio micphone

    DWORD CALLBACK waveInProc(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwPara ...

  10. error C2065: 'INVALID_SET_FILE_POINTER' : undeclared identifier

    Searching MSDN for that constant brings up one result: it's a failure code for SetFilePointer() and ...