cef使用缓存_CEF 文件下载功能实现
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 文件下载功能实现相关推荐
- BAT实现文件下载功能
[Win]闲来无事之-记用BAT实现文件下载功能 闲来无事之--记用BAT(批处理脚本)实现文件下载功能 标题:闲来无事之--记用BAT(批处理脚本)实现文件下载功能 作者:ZV(ZVROP) 邮件: ...
- PHP使用header实现文件下载功能
这篇文章主要介绍了PHP使用header方式实现文件下载功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下 先给大家介绍下PHP header() 函数 定义和用法 header() 函数向客户端 ...
- java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用
一.前言 程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计 ...
- 多种方式实现文件下载功能
多种方式实现文件下载功能 (1)使用 NSURLConnection 直接方式 (2)使用 NSURLConnection 代理方式 (3)使用 NSURLsession 直接方式 (4)使用 NSU ...
- 用Jsp来实现文件下载功能的几种方式
用Jsp来实现文件下载功能的几种方式 1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中.这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限).这 ...
- ASP.NET网页中RAR、DOC、PDF等文件下载功能实例源代码
以前做asp.net下载功能的时候都是采用: <a href="http://www.wang0214.com/wgcms">下载</a> 的方式来实现下载 ...
- ASP.NET MVC 向浏览器发送文件以提供文件下载功能
撑到大三了,结果发现周围的同学更加堕落了,尤其是某些人,表面上看起来很认真,实际上三天打鱼,两天晒网,结果一事无成,却还要抱怨学校教育失败. 为了吸取他们的教训,就算是一个小小的编码问题,我也要努力解 ...
- Spring Boot入门(11)实现文件下载功能
在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能. 还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会. 本次建立的Spring Boot项目的主要功能 ...
- php下载的文件不是汉字,php实现支持中文的文件下载功能示例
前言 本文主要给大家介绍了关于php实现支持中文的文件下载功能的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 问题说明 文件下载,通常有一种最为简单的方法,那就是将url ...
最新文章
- 登上Science子刊,神经科学再次启发DNN设计!中科院揭秘介观自组织反向传播机制...
- 组织级项目管理实例分享——来自项目管理群的讨论
- jquery之stop()的用法
- 在没有域环境的情况下配置完整安装的SharePoint2010和2013
- less webpack 热更新_webpack---less+热更新 使用
- Linux ubuntu安装搜狗输入法
- c#值get、 set用法(包含自动转换的说明)
- c语言statistics函数,Logistic回归中C-Statistics计算方法
- 传统优化算法VS智能优化算法
- deepin linux 安装 磁盘管理,deepin安装教程
- PTA甲级 1114 Family Property (25 point(s))
- java微信提现_关于Java调用微信、支付宝支付提现
- GPT,GPT-2,GPT-3
- 中考英语听说计算机考试满分,关于做好北京2018年中考英语听说计算机考试工作的通知...
- 虚拟同步发电机VSG高/低电压穿越matlab仿真模型
- 企业微信hook接口,协议开发,群操作功能教程
- Attention机制的总结笔记
- ubuntu禁用独显的问题
- 齐博CMSV7任意文件读取漏洞批量测试POC
- 【Qt】png和jpg格式的图片(一)
热门文章
- 互联网运营面试题_产品运营成长必修课:做好项目复盘
- do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式
- Python多线程介绍及实例
- dfs题目这样去接题,秒杀leetcode题目
- AudioManager播放音乐
- 网络编程应用:基于UDP协议【实现文件下载】--练习
- 全面剖析【二叉树】的各类遍历方法
- Linux备份MySQL xshell_linux shell脚本备份mysql数据库
- .sql文件如何执行_Excel如何运行可执行文件,别急,用过vba Shell函数的都知道
- Lucene从入门到进阶(6.6.0版本)