2016-11-15 00:14:19 +00:00
## Class: DownloadItem
2015-09-20 11:08:31 +00:00
2016-04-22 17:30:49 +00:00
> Control file downloads from remote sources.
2016-04-21 22:35:29 +00:00
2021-06-15 20:50:31 +00:00
Process: [Main ](../glossary.md#main-process )< br />
_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._
2016-11-03 17:26:00 +00:00
2019-07-22 15:20:43 +00:00
`DownloadItem` is an [EventEmitter][event-emitter] that represents a download item in Electron.
2016-06-09 11:32:37 +00:00
It is used in `will-download` event of `Session` class, and allows users to
2015-09-20 11:08:31 +00:00
control the download item.
2023-11-21 07:50:08 +00:00
```js
2015-09-24 07:55:45 +00:00
// In the main process.
2018-09-13 16:10:51 +00:00
const { BrowserWindow } = require('electron')
2020-07-09 17:18:49 +00:00
const win = new BrowserWindow()
2016-05-04 17:59:02 +00:00
win.webContents.session.on('will-download', (event, item, webContents) => {
2015-09-24 07:55:45 +00:00
// Set the save path, making Electron not to prompt a save dialog.
2016-06-09 11:32:37 +00:00
item.setSavePath('/tmp/save.pdf')
item.on('updated', (event, state) => {
2016-06-09 11:57:29 +00:00
if (state === 'interrupted') {
console.log('Download is interrupted but can be resumed')
} else if (state === 'progressing') {
if (item.isPaused()) {
console.log('Download is paused')
} else {
console.log(`Received bytes: ${item.getReceivedBytes()}`)
}
2016-06-09 11:32:37 +00:00
}
})
2016-06-09 11:57:29 +00:00
item.once('done', (event, state) => {
2016-05-10 09:42:11 +00:00
if (state === 'completed') {
2016-06-09 11:32:37 +00:00
console.log('Download successfully')
2015-09-20 11:08:31 +00:00
} else {
2016-06-09 11:32:37 +00:00
console.log(`Download failed: ${state}`)
2015-09-20 11:08:31 +00:00
}
2016-06-09 11:32:37 +00:00
})
})
2015-09-20 11:08:31 +00:00
```
2016-11-08 05:31:36 +00:00
### Instance Events
#### Event: 'updated'
2015-09-20 11:08:31 +00:00
2016-06-09 11:32:37 +00:00
Returns:
* `event` Event
2021-11-16 04:13:18 +00:00
* `state` string - Can be `progressing` or `interrupted` .
2016-06-09 11:32:37 +00:00
Emitted when the download has been updated and is not done.
The `state` can be one of following:
* `progressing` - The download is in-progress.
* `interrupted` - The download has interrupted and can be resumed.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### Event: 'done'
2015-09-21 05:45:42 +00:00
2016-06-09 11:32:37 +00:00
Returns:
2015-09-21 05:45:42 +00:00
* `event` Event
2021-11-16 04:13:18 +00:00
* `state` string - Can be `completed` , `cancelled` or `interrupted` .
2015-09-20 11:08:31 +00:00
2016-06-09 11:32:37 +00:00
Emitted when the download is in a terminal state. This includes a completed
2016-11-03 17:26:00 +00:00
download, a cancelled download (via `downloadItem.cancel()` ), and interrupted
2015-09-20 11:08:31 +00:00
download that can't be resumed.
2016-06-09 11:32:37 +00:00
The `state` can be one of following:
* `completed` - The download completed successfully.
* `cancelled` - The download has been cancelled.
* `interrupted` - The download has interrupted and can not resume.
2016-11-08 05:31:36 +00:00
### Instance Methods
2015-09-20 11:08:31 +00:00
The `downloadItem` object has the following methods:
2016-11-08 05:31:36 +00:00
#### `downloadItem.setSavePath(path)`
2015-09-24 07:55:45 +00:00
2021-11-16 04:13:18 +00:00
* `path` string - Set the save file path of the download item.
2015-09-24 07:55:45 +00:00
The API is only available in session's `will-download` callback function.
2020-09-23 02:02:05 +00:00
If `path` doesn't exist, Electron will try to make the directory recursively.
2015-09-24 07:55:45 +00:00
If user doesn't set the save path via the API, Electron will use the original
2019-06-20 17:04:57 +00:00
routine to determine the save path; this usually prompts a save dialog.
2016-11-08 05:31:36 +00:00
#### `downloadItem.getSavePath()`
2016-07-28 00:33:36 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The save path of the download item. This will be either the path
2016-07-28 00:33:36 +00:00
set via `downloadItem.setSavePath(path)` or the path selected from the shown
save dialog.
2018-11-08 14:51:06 +00:00
#### `downloadItem.setSaveDialogOptions(options)`
* `options` SaveDialogOptions - Set the save file dialog options. This object has the same
properties as the `options` parameter of [`dialog.showSaveDialog()` ](dialog.md ).
This API allows the user to set custom options for the save dialog that opens
for the download item by default.
The API is only available in session's `will-download` callback function.
#### `downloadItem.getSaveDialogOptions()`
Returns `SaveDialogOptions` - Returns the object previously set by `downloadItem.setSaveDialogOptions(options)` .
2016-11-08 05:31:36 +00:00
#### `downloadItem.pause()`
2015-09-20 11:08:31 +00:00
Pauses the download.
2016-11-08 05:31:36 +00:00
#### `downloadItem.isPaused()`
2016-06-09 11:51:01 +00:00
2021-11-16 04:13:18 +00:00
Returns `boolean` - Whether the download is paused.
2016-06-09 11:51:01 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.resume()`
2015-09-20 11:08:31 +00:00
Resumes the download that has been paused.
2017-11-23 12:31:09 +00:00
**Note:** To enable resumable downloads the server you are downloading from must support range requests and provide both `Last-Modified` and `ETag` header values. Otherwise `resume()` will dismiss previously received bytes and restart the download from the beginning.
2017-04-21 13:14:56 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.canResume()`
2016-06-09 11:51:01 +00:00
2021-11-16 04:13:18 +00:00
Returns `boolean` - Whether the download can resume.
2016-06-09 11:51:01 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.cancel()`
2015-09-20 11:08:31 +00:00
Cancels the download operation.
2016-11-08 05:31:36 +00:00
#### `downloadItem.getURL()`
2015-09-20 11:08:31 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The origin URL where the item is downloaded from.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getMimeType()`
2015-09-20 11:08:31 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The files mime type.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.hasUserGesture()`
2015-09-20 11:08:31 +00:00
2021-11-16 04:13:18 +00:00
Returns `boolean` - Whether the download has user gesture.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getFilename()`
2015-09-20 11:08:31 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The file name of the download item.
2015-09-20 11:08:31 +00:00
2015-09-24 08:31:41 +00:00
**Note:** The file name is not always the same as the actual one saved in local
disk. If user changes the file name in a prompted download saving dialog, the
actual name of saved file will be different.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getTotalBytes()`
2015-09-20 11:08:31 +00:00
2016-09-24 23:59:30 +00:00
Returns `Integer` - The total size in bytes of the download item.
2015-09-21 05:45:42 +00:00
If the size is unknown, it returns 0.
2015-09-20 11:08:31 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getReceivedBytes()`
2015-09-20 11:08:31 +00:00
2016-09-24 23:59:30 +00:00
Returns `Integer` - The received bytes of the download item.
2015-09-21 01:38:38 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getContentDisposition()`
2015-09-21 01:38:38 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The Content-Disposition field from the response
2015-09-21 01:38:38 +00:00
header.
2016-06-09 11:32:37 +00:00
2016-11-08 05:31:36 +00:00
#### `downloadItem.getState()`
2016-06-09 11:32:37 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - The current state. Can be `progressing` , `completed` , `cancelled` or `interrupted` .
2016-11-23 08:35:26 +00:00
**Note:** The following methods are useful specifically to resume a
`cancelled` item when session is restarted.
#### `downloadItem.getURLChain()`
2021-11-16 04:13:18 +00:00
Returns `string[]` - The complete URL chain of the item including any redirects.
2016-11-23 08:35:26 +00:00
#### `downloadItem.getLastModifiedTime()`
2021-11-16 04:13:18 +00:00
Returns `string` - Last-Modified header value.
2016-11-23 08:35:26 +00:00
#### `downloadItem.getETag()`
2021-11-16 04:13:18 +00:00
Returns `string` - ETag header value.
2016-11-23 08:35:26 +00:00
#### `downloadItem.getStartTime()`
Returns `Double` - Number of seconds since the UNIX epoch when the download was
started.
2019-06-20 17:04:57 +00:00
### Instance Properties
#### `downloadItem.savePath`
2021-11-16 04:13:18 +00:00
A `string` property that determines the save file path of the download item.
2019-06-20 17:04:57 +00:00
The property is only available in session's `will-download` callback function.
If user doesn't set the save path via the property, Electron will use the original
routine to determine the save path; this usually prompts a save dialog.
2019-07-22 15:20:43 +00:00
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter