下载 ember 中的文件:使用 Ember-cli-file-saver

Download files in ember: using Ember-cli-file-saver

这可能是我的无知,但我只使用文档中提到的模型方法下载了 api 生成的文件。使用组件我很盲目。

具体问题是:我在哪里将提及 arraybuffer:true 传递给应用程序适配器或自定义 ajax 请求?你有一个有效的例子吗?

这是使用 ajax 服务的简单尝试:

import Component from '@ember/component';
import FileSaverMixin from 'ember-cli-file-saver/mixins/file-saver';
import { inject as service } from '@ember/service';

export default Component.extend(FileSaverMixin, {
  tagName: 'div',
  ajax: service(),
  store: service(),
  click() {
    this.get('ajax').request('/excel', {
      options: {
        arraybuffer: true
      }
      }
    ).then((content) => {
      console.log(content);
      this.saveFileAs(this.get('filename'), content, this.get('contentType'));
    }).catch((error) => {
      console.log(error);
    })
  }
});

这是我的适配器:

import DS from 'ember-data';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
import AdapterArrayBufferMixin from 'ember-cli-file-saver/mixins/adapter-arraybuffer-mixin';
import ENV from 'efac-front/config/environment';

export default DS.JSONAPIAdapter.extend(
  DataAdapterMixin,
  AdapterArrayBufferMixin,
  {
    authorizer: 'authorizer:token',
    namespace: 'api',
    host: ENV.host
  }
);

我不断收到 SyntaxError: Unexpected token P in JSON at position 0... 错误,因为它试图将数组缓冲区或二进制响应解释为 json 数据。

我非常感谢你在这里投射的任何光芒

嗯,这非常简单,但没有很好的记录。我只需要像这样将 dataType 键添加到我的 ajax 请求中:

this.get('ajax').request('/excel', {
      dataType: 'arraybuffer',
      options: {
        arraybuffer: true
      }
      }
    ).then((content) => {
      this.saveFileAs('reporte-asistencia.xlsx', content, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    }).catch((error) => {
      console.log(error);
    });

也可以用dataType: 'blob'来完成。