Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sindresorhus/multi-download
Download multiple files at once in the browser
https://github.com/sindresorhus/multi-download
Last synced: about 2 months ago
JSON representation
Download multiple files at once in the browser
- Host: GitHub
- URL: https://github.com/sindresorhus/multi-download
- Owner: sindresorhus
- License: mit
- Created: 2014-05-02T17:38:13.000Z (over 10 years ago)
- Default Branch: main
- Last Pushed: 2023-09-21T03:42:26.000Z (about 1 year ago)
- Last Synced: 2024-04-14T09:53:04.051Z (5 months ago)
- Language: HTML
- Homepage: https://sindresorhus.com/multi-download/
- Size: 319 KB
- Stars: 566
- Watchers: 14
- Forks: 54
- Open Issues: 5
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
# multi-download
> Download multiple files at once in the browser
![](screenshot.gif)
It works by abusing the `a`-tag [`download` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download).
## [Demo](https://sindresorhus.com/multi-download/)
## Install
```sh
npm install multi-download
```*Note: This package targets the latest versions of Chrome, Firefox, and Safari.*
## Usage
```html
Download
``````js
import multiDownload from 'multi-download';document.querySelector('#download-button').addEventListener('click', event => {
const files = event.target.dataset.files.split(' ');
multiDownload(files);
});
``````js
import multiDownload from 'multi-download';// With jQuery
$('#download-button').on('click', () => {
const files = $(this).data('files').split(' ');
multiDownload(files);
});
``````js
import multiDownload from 'multi-download';// With Blob
const unicorn = URL.createObjectURL(new Blob(['🦄'], {type: 'text/plain'}));
const goat = URL.createObjectURL(new Blob(['🐐'], {type: 'text/plain'}));
multiDownload([unicorn, goat]);
```## API
### multiDownload(urls, options?)
Returns a `Promise` that resolves when all the downloads have started.
Note that there's a delay of 1 second between each download.
#### urls
Type: `string[]`
The URLs to files you want to download. Can be absolute or relative, even cross-origin.
#### options
Type: `object`
##### rename
Type: `Function`
A function that accepts an object containing `url`, `index`, and `urls` properties and is expected to return the new filename.
```html
Download
``````js
import multiDownload from 'multi-download';document.querySelector('#download-button').addEventListener('click', event => {
const files = event.target.dataset.files.split(' ');
multiDownload(files, {
rename: ({url, index, urls}) => 'New name.pdf'
});
});
```## Caveats
If the user has enabled "Ask where to save each file before downloading" in Chrome, it will only download the first file.