JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q36000F
  • License MIT

Blob stream file download of native JS

Package Exports

  • m-downloads

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (m-downloads) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Installing

  • Using npm

    npm install m-downloads
  • Using yarn

    yarn add m-downloads

Use examples

  • Proxy interception

    import Download from 'm-downloads'
    
    const m = new Map()
    m.set('POST', (url, options) => {
      const { data = {}, headers = {}, ...config } = options
      Object.assign(config, {
        url,
        body: data ? JSON.stringify(data) : null,
        headers: {
          ...headers,
          'Content-Type': 'application/json; charset=utf-8',
          'Authorization': localStorage.getItem('AUTH-TOKEN'),
        },
      })
      return config
    })
    m.set('GET', (url, options) => ({ url, ...options }))
    
    const handler = {
      construct(target, [url, options] = args) {
        const method = options.method ? options.method.toUpperCase() : 'GET'
        return new target(m.get(method)(url, options))
      }
    }
    const ProxyDownload = new Proxy(Download, handler)
    export default ProxyDownload
  • GET request

    const downloader = new Download('/api/download', {
      filename: 'Custom file name'
    })
    downloader
      .catch(error => { console.log(error) })
      .finally(() => console.log('A successful or failed operation, such as the handling of loading'))

    Note: if a custom file name is specified, the filename value in the response header Content-Disposition will be ignored

  • POST request

    const downloader = new Download('/api/download', {
      method: 'POST',
      data: { id: 5, type: 1 },
    })
    downloader
      .catch(error => { console.log(error) })
      .finally(() => console.log('A successful or failed operation, such as the handling of loading'))
  • Get download progress

    const downloader = new Download('/api/download', {
      getProgress(percentage) {
        console.log(`Download progress:${percentage}`)
      }
    })
    downloader
      .catch(error => { console.log(error) })
      .finally(() => console.log('A successful or failed operation, such as the handling of loading'))

    Note: you need to read the Content-Length field of the server response header to get the total size of the downloaded file

  • Capturing JSON errors in server response

    {
      "status": 500,
      "msg": "The amount of data is too large. It is recommended to export splitting conditions in batches",
    }
    const downloader = new Download('/api/download', {
      method: 'POST',
      data: { id: 5, type: 1 },
    })
    downloader
      .catch(error => {
        console.log('errorMsg', error.statusText)
      })