使用Ext JS 6

时间:2015-12-03 16:55:34

标签: java spring file extjs download

我正在尝试使用基于此帖子的Ext JS 6组件从服务器下载文件:download a file via Ext js 4

这是组件代码:

Ext.define('Aft.view.search.FileDownload', {
extend: 'Ext.Component',
alias: 'widget.acw-fileDownload',
autoEl: {
    tag: 'iframe',
    cls: 'x-hidden',
    src: Ext.SSL_SECURE_URL
},
load: function(config){
    var e = this.getEl();
    e.dom.src = config.url +
        (config.params ? '?' + Ext.urlEncode(config.params) : '');
    e.dom.onload = function() {
        if(e.dom.contentDocument.body.childNodes[0].wholeText == '404') {
            console.
            Ext.create('Acw.view.commons.notifications.Error', {
                html: 'The document you are after can not be found on the server.',
                closeAll: true
            }).show();
        }
    }
}
});

这是获取文件的调用:

doExportData: function(){
    this.getView().load({
        url: '/aft/faults/download-file'

});

这是Spring rest服务返回一个模拟文件:

@RequestMapping(value = "/download-file", method = RequestMethod.POST)
public void downloadFilePost(HttpServletResponse response) {

    String csvFileName = "searchFaults.csv";
    response.setContentType("text/csv");

    // creates mock data
    String headerKey = "Content-Disposition";
    String headerValue = String.format("attachment; filename=\"%s\"", csvFileName);
    response.setHeader(headerKey, headerValue);

    try {
        CSVWriter writer = new CSVWriter(response.getWriter(), '\t');
        String[] entries = "first#second#third".split("#");
        writer.writeNext(entries);
        writer.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

然而,当我打电话时,我得到这样的话:

  

[E] Ext.JSON.decode():您正在尝试解码无效的JSON字符串:“first”“second”“third”   未捕获错误:您正在尝试解码无效的JSON字符串:“first”“second”“third”

似乎有东西到达客户端,但它试图将其解析为JSON。尽管如此,如果我将RequestMethod更改为GET并直接在浏览器中输入URL,我会得到该文件,这让我认为标题是正确的。

有人可以帮我解决这个问题,或者您是否使用不同的方法/组件从服务器下载文件?

1 个答案:

答案 0 :(得分:4)

只需使用以下代码即可下载文件:

doExportData: function(config){
    window.location.assign(config.url + 
   (config.params ? '?' + Ext.urlEncode(config.params) : ''));
});