ember-cli-file-saver

2.0.0 • Public • Published

Ember-cli-file-saver

Provides support to save binary file from an API for an Ember CLI application.

Installation

Install the ember-cli addon in your ember-cli project:

$ ember install ember-cli-file-saver

This should also automatically:

  • add an NPM dependency to FileSaver.
  • add a transport layer for jQuery to handle arraybuffer and blob dataType.

Note that to make this new transport layer works nicely with ember-data it is necessary to make your adapter extend the adapter-arraybuffer-mixin mixin and pass either arraybuffer:true or blob:true as an AJAX option, otherwise ember-data will try to interpret the response as JSON.

Usage

ES6 Import

This addon provides the ability to import FileSaver as an ES6 module.

import FileSaver from 'file-saver';

Adapter Mixin for ArrayBuffer / Blob response

import ActiveModelAdapter from 'active-model-adapter';
import AdapterArrayBufferMixin from 'ember-cli-file-saver/mixins/adapter-arraybuffer-mixin';
 
const ApplicationAdapter = ActiveModelAdapter.extend(AdapterArrayBufferMixin);
 
ApplicationAdapter.reopen({
 // 
});
 
export default ApplicationAdapter;

Download from a component

import Ember from 'ember';
import FileSaverMixin from 'ember-cli-file-saver/mixins/file-saver';
 
const { Component, computed } = Ember;
 
export default Component.extend(FileSaverMixin, {
 
  tagName: 'button',
 
  click() {
    this.get('ajax').request(this.get('downloadUrl'), {
      method: 'GET',
      dataType: 'arraybuffer', // or 'blob'
      processData: false
    })
    .then((content) => this.saveFileAs(this.get('filename'), content, this.get('contentType')));
  }
});

Using from a model

This works well with the ember-api-actions project:

// models/invoice.js
 
import Ember from 'ember';
import DS from 'ember-data';
import { memberAction } from 'ember-api-actions';
 
const { computed } = Ember;
const { belongsTo, attr, Model } = DS;
 
export default Model.extend({
 
  invoiceNumber: attr('number'),
 
  download: memberAction({ path: 'download', type: 'GET', ajaxOptions: { arraybuffer: true } })
});
// in a component
 
invoiceModel
  .download()
  .then((pdfContent) => this.saveFileAs('invoice.pdf', pdfContent, 'application/pdf'));
 

Installation

  • git clone <repository-url> this repository
  • cd ember-cli-file-saver
  • npm install

Running

Running Tests

  • npm test (Runs ember try:each to test your addon against multiple Ember versions)
  • ember test
  • ember test --server

Building

  • ember build

For more information on using ember-cli, visit http://ember-cli.com/.

Package Sidebar

Install

npm i ember-cli-file-saver

Weekly Downloads

4,301

Version

2.0.0

License

MIT

Unpacked Size

11.7 kB

Total Files

9

Last publish

Collaborators

  • panthony