下载 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'
来完成。
这可能是我的无知,但我只使用文档中提到的模型方法下载了 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'
来完成。