CEF 下载功能非常容易拓展,它提供了丰富的接口和控制功能,比如对正在下载的文件实现暂停、继续、取消等操作。并且 CEF 还帮我们默认实现了一个另存为的对话框,如果不是必须你甚至都不需要去自己实现这个保存对话框。接下来我们来看 CEF 对于下载功能提供的两个接口(使用 cefclient 项目举例)

继承 CefDownloadHandler

在一切开始之前,首先你的 ClientHandler 要继承 CefDownloadHandler 类:

该类提供了两个接口,分别是 OnBeforeDownload 和 OnDownloadUpdated,前者是在下载任务开始之前就会被回调的一个接口,你需要根据你的需求在该接口中实现一些预处理操作。后者是任务下载过程中的回调接口,包含了任务的进度、状态以及控制功能。下面分别详细介绍两个接口。

OnBeforeDownload 接口

virtual void OnBeforeDownload(

CefRefPtr browser,

CefRefPtr download_item,

const CefString& suggested_name,

CefRefPtr callback) = 0;

上面介绍到该接口会在文件开始下载前被调用,

browser 参数表示当前实例

download_item 中包含了该下载任务的状态信息,可以通过其成员函数 IsInProgress,IsComplete,IsCanceled 等方法判断文件的当前状态,但在下载文件之前去判断这些貌似没有什么意义。

suggested_name 代表当前 CEF 帮你设定好的建议保存名称,一般会截取文件路径中最后的文件名作为建议名称。

callback 这个参数比较重要,当你调用了 callback 的 Continue 方法后,任务就开始下载了,该回调第一个参数 download_path 就是保存文件的名称,第二个参数表示是否弹出保存对话框,当把第二个参数设置为 true 时,CEF 会帮我们弹出一个 Save File 的保存对话框。如果你设置为 false 了,那么将不弹出保存对话框,并自动保存文件到第一个参数设定的路径下。

通过该接口我们可以对任务做一些预处理,比如当你想在界面中创建一个下载任务时,可以通过 download_item 参数获得任务 ID(GetId 方法)交给 UI 去表示任务即将开始。接下来进入下面的下载任务状态更新函数时,再根据任务 Id 去更新界面内容。

OnDownloadUpdated 接口

该接口在任务下载过程中被回调,但据我测试,这个接口会优先于 OnBeforeDownload 接口被调用,具体原因还是不太了解,不过无伤大雅,我们只关注这里的任务进度、状态和控制功能就可以了。

virtual void OnDownloadUpdated(CefRefPtr browser,

CefRefPtr download_item,

CefRefPtr callback) {}

browser 这个不多介绍了

download_item 与上面介绍的一样,可以获取任务的进度、状态、下载速度、已经下载量等,可以看一下 CefDownloadItem 的接口看一下都有什么控制功能。

callback 这里的 callback 和上面接口的 callback 是不一样的,这个 callback 可以控制任务的暂停、继续、停止等操作,你可以维护一份当前任务的列表将该 callback 与任务 Id 绑定,当界面传来暂停任务的控制消息时,可以通过任务 Id 到列表中找到这个 callback,调用 callback 的 Pause 方法来暂停任务。当然别忘记在任务完成或者被取消的时候从列表中移除这些 callback 和任务 Id 的绑定关系。

总结

CEF 提供的下载接口控制功能还是很丰富的,甚至将进度中下载的速度都帮你计算完成你可以直接使用的。如果想配合 UI 实现一些个性化的展示都是可以完成的。大家可以自己试一试,遇到任何技术问题欢迎在下方讨论。

相关

cef使用缓存_CEF 文件下载功能实现相关推荐

  1. BAT实现文件下载功能

    [Win]闲来无事之-记用BAT实现文件下载功能 闲来无事之--记用BAT(批处理脚本)实现文件下载功能 标题:闲来无事之--记用BAT(批处理脚本)实现文件下载功能 作者:ZV(ZVROP) 邮件: ...

  2. PHP使用header实现文件下载功能

    这篇文章主要介绍了PHP使用header方式实现文件下载功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下 先给大家介绍下PHP header() 函数 定义和用法 header() 函数向客户端 ...

  3. java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用

    一.前言   程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计 ...

  4. 多种方式实现文件下载功能

    多种方式实现文件下载功能 (1)使用 NSURLConnection 直接方式 (2)使用 NSURLConnection 代理方式 (3)使用 NSURLsession 直接方式 (4)使用 NSU ...

  5. 用Jsp来实现文件下载功能的几种方式

    用Jsp来实现文件下载功能的几种方式 1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中.这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限).这 ...

  6. ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码

    以前做asp.net下载功能的时候都是采用: <a href="http://www.wang0214.com/wgcms">下载</a> 的方式来实现下载 ...

  7. ASP.NET MVC 向浏览器发送文件以提供文件下载功能

    撑到大三了,结果发现周围的同学更加堕落了,尤其是某些人,表面上看起来很认真,实际上三天打鱼,两天晒网,结果一事无成,却还要抱怨学校教育失败. 为了吸取他们的教训,就算是一个小小的编码问题,我也要努力解 ...

  8. Spring Boot入门(11)实现文件下载功能

      在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能.   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会.   本次建立的Spring Boot项目的主要功能 ...

  9. php下载的文件不是汉字,php实现支持中文的文件下载功能示例

    前言 本文主要给大家介绍了关于php实现支持中文的文件下载功能的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 问题说明 文件下载,通常有一种最为简单的方法,那就是将url ...

最新文章

  1. 登上Science子刊,神经科学再次启发DNN设计!中科院揭秘介观自组织反向传播机制...
  2. 组织级项目管理实例分享——来自项目管理群的讨论
  3. jquery之stop()的用法
  4. 在没有域环境的情况下配置完整安装的SharePoint2010和2013
  5. less webpack 热更新_webpack---less+热更新 使用
  6. Linux ubuntu安装搜狗输入法
  7. c#值get、 set用法(包含自动转换的说明)
  8. c语言statistics函数,Logistic回归中C-Statistics计算方法
  9. 传统优化算法VS智能优化算法
  10. deepin linux 安装 磁盘管理,deepin安装教程
  11. PTA甲级 1114 Family Property (25 point(s))
  12. java微信提现_关于Java调用微信、支付宝支付提现
  13. GPT,GPT-2,GPT-3
  14. 中考英语听说计算机考试满分,关于做好北京2018年中考英语听说计算机考试工作的通知...
  15. 虚拟同步发电机VSG高/低电压穿越matlab仿真模型
  16. 企业微信hook接口,协议开发,群操作功能教程
  17. Attention机制的总结笔记
  18. ubuntu禁用独显的问题
  19. 齐博CMSV7任意文件读取漏洞批量测试POC
  20. 【Qt】png和jpg格式的图片(一)

热门文章

  1. 互联网运营面试题_产品运营成长必修课:做好项目复盘
  2. do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
  3. Python多线程介绍及实例
  4. dfs题目这样去接题,秒杀leetcode题目
  5. AudioManager播放音乐
  6. 网络编程应用:基于UDP协议【实现文件下载】--练习
  7. 全面剖析【二叉树】的各类遍历方法
  8. Linux备份MySQL xshell_linux shell脚本备份mysql数据库
  9. .sql文件如何执行_Excel如何运行可执行文件,别急,用过vba Shell函数的都知道
  10. Lucene从入门到进阶(6.6.0版本)