ledown
Version:
A library for nodejs to download http large file in pauseable and resumable way
154 lines (113 loc) • 3.62 kB
Markdown
# LeDown
### A resumable downloader
[](https://travis-ci.org/liuxiaole/ledown)
[](https://coveralls.io/github/liuxiaole/ledown?branch=master)
[](https://badge.fury.io/js/ledown)
A library for nodejs to download http large file in pauseable and resumable way
## Prerequisite
Node >= 8.0
## Usage
### Commonjs
```js
var Task = require('ledown').Task
Task.create({
url: 'url',
downloadPath: 'path'
}).then(function(task) {
task.on('progress', function(){
console.log(task.progress)
})
task.on('error', function(err) {
console.log(err)
})
task.on('end', function() {
console.log('end')
})
task.start()
})
```
### ES6
```js
import { Task } from 'ledown'
await task = Task.create({
url: 'url',
downloadPath: 'path'
})
task.on('progress', () => {
console.log(task.progress)
})
task.on('error',err => {
console.log(err)
})
task.on('end', () => {
console.log('end')
})
task.start()
setTimeout(() => {
if(task.progress !== 1) {
task.stop()
.then(() => {
task.storeToFile(path.join(__dirname, './task.config'))
})
}
}, 1000)
```
## Documentation
### static create(options: TaskOptions): Promise\<Task\>
Static method on Task class for creating a new download task.
```ts
type TaskOptions = {
url: string
referUrl?: string
downloadDir?: string
downloadPath: string
} | {
url: string
referUrl?: string
downloadDir: string
downloadPath?: string
}
```
You have to specify whether the downloadDir or downloadPath. If you just specify the downloadDir, a random name will be used.
Task.create use HTTP `HEAD` method to get metadata of the resource. If server respond an error, the returned promise will be rejected.
### static restoreFromFile(path: string): Promise\<Task\>
Restore task from previous task config file. If ether the specified config file or the previous unfinished downloading file not exists, the returned promise will be rejected.
### static Task.Error
+ Task.ERROR.ERR_NO_METADATA
+ Task.ERROR.ERR_DISK_IO_WRITE
+ Task.ERROR.ERR_NETWORK
```js
task.on('error', (e) => {
if(e.message === Task.ERROR.ERR_DISK_IO_WRITE) {
// write disk error
} else if(e.message === Task.ERROR.ERR_NETWORK) {
// download resource error
}
})
```
### Task#storeToFile(path: string): Promise\<void\>
Store a task config to specified path. IO error will cause the returned promise to be rejected. This method will not stop the task. You could call `task.stop()` as needed.
### Task#start(numOfThread: number = 1): void
Start the task. If you specify the `numOfThread` argument, it will concurrently start multiple http request.
### Task#stop(): Promise\<void\>
Stop the task. We could not stop the task immediately, since we have no method to suspend write task.
### Task#on(event: string, listener: function): void
Events that may triggered:
+ on('error')
+ on('progress')
+ on('end')
### Task#off(event: string, listener: function): void
Remove the listener of the specific event.
### Task#progress: number
Progress of the task. When the task complete, task.progress is 1.
### Task#metadata
The structure of task.metadata is:
+ url: string
+ createDate: Date
+ mimeType: string
+ downloadPath: string
+ totalBytes: number
+ resumable: boolean
## LICENSE
[MIT](https://opensource.org/licenses/MIT)
Copyright (c) 2017-present, Xiaole (Will) Liu