本文介绍: 应用中的文件下载

控制从远程源的文件下载。

进程: 主进程

DownloadItem(下载项)是一个在Electron中展示下载项的EventEmitter

它被用于 Session类中的 will-download事件,并允许用户控制下载项。

  1. //主进程中
  2. const {BrowserWindow} = require('electron')
  3. let win = new BrowserWindow()
  4. win.webContents.session.on('will-download', (event, item, webContents) => {
  5. //设置保存路径,使Electron不提示保存对话框。
  6. item.setSavePath('/tmp/save.pdf')
  7. item.on('updated', (event, state) => {
  8. if (state === 'interrupted') {
  9. console.log('下载已中断,但可以恢复')
  10. } else if (state === 'progressing') {
  11. if (item.isPaused()) {
  12. console.log('下载已暂停')
  13. } else {
  14. console.log(`Received bytes: ${item.getReceivedBytes()}`)
  15. }
  16. }
  17. })
  18. item.once('done', (event, state) => {
  19. if (state === 'completed') {
  20. console.log('下载成功')
  21. } else {
  22. console.log(`下载失败: ${state}`)
  23. }
  24. })
  25. })

实例事件

事件: ‘updated’

触发:下载获得更新且未完成时

  • event Event
  • state String,可选以下状态:
    • progressing - 下载正在进行中。
    • interrupted - 下载已中断但可以恢复。

事件: ‘done’

触发:下载处于完成状态(如已完成,被 downloadItem.cancel()取消,意外中断)

  • event Event
  • state String,可选以下状态:
    • completed - 下载已成功完成。
    • cancelled - 下载已取消。
    • interrupted- 下载已中断,无法恢复。

实例方法

downloadItem.setSavePath(path)

用途:设置下载目录

  • path String - 下载项目的保存路径。

API仅在会话的 will-download 回调函数中可用。 如果用户未通过API设置保存路径,Electron将使用原始保存路径(通常提示保存对话框)。

downloadItem.getSavePath()

用途:返回下载目录

通过 downloadItem.setSavePath(path) 设置的路径或从保存对话框中选择的路径。

downloadItem.pause()

用途:暂停下载

downloadItem.isPaused()

用途:判断下载是否已被暂停

downloadItem.resume()

用途:恢复已暂停的下载

注意: 要启用可继续的下载项,您正在下载的服务器必须支持范围请求,并提供 Last-ModifiedETag头值。 否则 resume()将关闭以前收到的字节,并从头开始重新下载。

downloadItem.canResume()

用途:判断下载是否可以恢复

downloadItem.cancel()

用途:取消下载

downloadItem.getURL()

用途:获取下载项的链接地址

downloadItem.getMimeType()

用途:获取下载项的文件mime类型

downloadItem.hasUserGesture()

用途:判断下载是否具有用户手势

downloadItem.getFilename()

用途:获取下载项的文件名

注意:文件名不一定与保存在本地磁盘中的实际文件名相同。如果用户在提示的下载保存对话框中更改文件名,则保存文件的实际名称将不同。

downloadItem.getTotalBytes()

用途:获取下载项的文件大小(以bytes字节为单位) 如果大小未知,则返回0。

downloadItem.getReceivedBytes()

用途:获取下载项的已接收字节数(以bytes字节为单位)

downloadItem.getContentDisposition()

用途:获取下载项的响应头的Content-Disposition字段(字符串)

downloadItem.getState()

用途:获取下载项的当前状态

可以是 progressing下载中, completed已完成, cancelled已取消, interrupted中断且无法恢复.

注意:以下方法适用于在会话重新启动时恢复 cancelled项。

downloadItem.getURLChain()

用途:获取下载项的完整下载链接(包含任何重定向)(字符串)

downloadItem.getLastModifiedTime()

用途:获取下载项的Last-Modified标头值(字符串)

downloadItem.getETag()

用途:获取下载项的ETag头值(字符串)

downloadItem.getStartTime()

用途:获取下载项的开始下载时间(秒级)(字符串)