npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

js-file-downloader

v1.1.25

Published

Small lib for a cool download experience

Downloads

154,111

Readme


JS File Downloader

🌟Please remember to star this github repo if you like it. Thank you! ❤️

Introduction

JS File Downloader is a simple no dependency library you will be able to download file from browser and show downloading status.

Browser Compatibility

JS File Downloader supports all browsers that are [ES5-compliant] (http://kangax.github.io/compat-table/es5/) (IE8 and below are not supported).


Installing with package manager

With a package manager (recommended):

npm install js-file-downloader --save 

Basic usage


import JsFileDownloader from 'js-file-downloader';

const fileUrl = 'http://...';

new JsFileDownloader({ 
    url: fileUrl
  })
  .then(function () {
    // Called when download ended
  })
  .catch(function (error) {
    // Called when an error occurred
  });
  

Use without a package manager

Download this library from https://github.com/AleeeKoi/js-file-downloader/releases

<script src="/path/to/js-file-downloader.min.js"></script>
<script>
  // Then somewhere in your code
  new jsFileDownloader({ url: 'https://cdn.apedesign.net/github/logo.png' })
    .then(function () {
      // Called when download ended
    })
    .catch(function (error) {
      // Called when an error occurred
    });
</script>

Options:

process (for checking download status)

A function to call every time a process event is called. Function receive an Event Object as input.


function process (event) {
  if (!event.lengthComputable) return; // guard
  var downloadingPercentage = Math.floor(event.loaded / event.total * 100);
  // what to do ...
};

new JsFileDownloader({ 
  url: '...',
  process: process
})
  

onloadstart ('loadstart' event listener)

A function to call when a 'loadstart' event is triggered.


function onloadstart () {
  // what to do ...
}

new JsFileDownloader({ 
  url: '...',
  onloadstart
})
  

headers (of request)

If you need to customize request header data you can pass an array of objects like following example:

new JsFileDownloader({ 
  url: '...',
  headers: [
    { name: 'Authorization', value: 'Bearer ABC123...' }
  ]
})

filename

Setting this String you can force output file name

timeout (ms)

Integer value (default 40000) defining how much ms attend before stop download action.

autoStart

Boolean value (default true) to enable/disable automatically starting the download. When the value is true the constructor returns a Promise, however when it's set to false, the constructor doesn't return anything and the download can be started by calling the start() method on the object.

Example with autoStart set to true

new JsFileDownloader({ 
  url: '...',
  autoStart: true
})

Example with autoStart set to false

const download = new JsFileDownloader({ 
  url: '...',
  autoStart: false
});

download.start()
  .then(function(){
      // success 
  })
  .catch(function(error){
      // handle errors
  });

forceDesktopMode

Boolean value (default false) to force desktop mode even on mobile devices for downloading files.

new JsFileDownloader({ 
  url: '...',
  forceDesktopMode: true
})

withCredentials

This is a Boolean that indicates whether or not cross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates. Setting withCredentials has no effect on same-site requests.

new JsFileDownloader({ 
  url: '...',
  withCredentials: true
})

method

The HTTP request method to use, such as "GET", "POST", "PUT", etc. (default "GET") Ignored for non-HTTP(S) URLs.

new JsFileDownloader({ 
  url: '...',
  method: 'POST'
})

nameCallback

You could pass a callback to customize final name, the function receive as 1st argument the name automatically extracted.

new JsFileDownloader({ 
  url: '...',
  nameCallback: function(name) {
    return 'i-am-prefix-' + name;
  }
})

contentType

Setting this property you can customize the content type in the heade request, default is 'application/x-www-form-urlencoded' If you set this property as false, the library doesn't set it.

new JsFileDownloader({ 
  url: '...',
  contentType: 'multipart/form-data; boundary=something' // or false to unset it
})

nativeFallbackOnError

By setting this property to true (default is false) when error occours the download will fallback to the default behavior opening a new tab.

new JsFileDownloader({ 
  url: '...',
  nativeFallbackOnError: true
})

body

By setting this property you can customize the body content sent with the request. Default value is null (nothing is sent), Document or BodyInit value can be set.

new JsFileDownloader({ 
  url: '...',
  body: 'The body as a string'
})

contentTypeDetermination

By setting this property the downloader will determine the content type automatically depending on the value.

value | description --- | --- "header" | Gets type from content-type response header. "signature" | Analyzes the first 4 bytes of the returned file and will check if that signature exists in the predetermined dict (You can override/merge this dict with the customFileSigantures property). "full" | Uses both methods from above but prefers "siganture". false | Type is not determined and the default is added, application/octet-stream.

new JsFileDownloader({ 
  url: '...',
  contentTypeDetermination: 'header'
})

customFileSignatures

By setting this value you can override/merge the predefined signature dict (src/signatures.js). The key represents the hex code of a file (for more information here) and the value should be in the format of a content type (e.g. application/pdf). Setting this value has only an affect when contentTypeDetermination is set to "full" or "signature".

new JsFileDownloader({ 
  url: '...',
  contentTypeDetermination: 'full', // must be set to "full" or "signature"
  customFileSignatures: {
    'FFFB':'audio/mpeg',
    'FFF3':'audio/mpeg',
    'FFF2':'audio/mpeg',
    '494433': 'audio/mpeg'
  }
})

Abort:

Setting autoStart option to false the process can be aborted calling the related method abort. The download promise is rejected, the reason can be customized passing is as the 1st param of the abort function.

const download = new JsFileDownloader({ 
  url: '...',
  autoStart: false
});

download.start()
  .catch(function(reason){
      // handle errors
  });

download.abort(/** reason */);

License

MIT

Copyright (c) 2019-present, Alessandro Pellizzari

apedesign.net