如何在Extjs 7.0 Modern框架中启动文件下载

f87krz0w  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(196)

在Extjs经典框架中,我们使用Ext.form.Panel启动文件下载。在Modern框架中,我无法让Ext.form.Panel做同样的事情。那么,我如何在Modern框架中执行简单的文件下载(可能是大文件)。我宁愿不必更改服务器端代码。
这是我们在Classic中使用的代码

params={};

params.doc_path=rec.get('server_path');
params.doc_link_name=rec.get('name');

var form = Ext.create('Ext.form.Panel', {
    standardSubmit: true,
    renderTo: Ext.getBody(),
    url: '/document/download',
    method: 'POST',
    timeout: 120
});

// Call the submit to begin the file download.
// Note that neither Success nor Failure are ever called
form.submit({
    params: params
});

这是ruby服务器中的服务器端代码

def download
    # A small helper to download the file passed in doc_path 
    send_file params["doc_path"],  type: 'application/octet-stream', disposition: 'attachment', filename: params["doc_link_name"]
end

如果我们在Modern中尝试这样做,我们的服务器不会收到正确的url。(我们得到一个路由错误)。在Modern中使用表单上传文件的工作方式与Classic相同,那么为什么文件下载的工作方式不同呢?
有人有关于如何使用Ext.exporter的示例代码吗。从服务器下载文件?我看了文件,刚刚迷路了。无论如何,当我提出Ext.exporter的需求时。文件我得到一个404未找到错误,所以这是不可能的。

k2arahey

k2arahey1#

我只需要点击并忘记,所以不需要跟踪成功或失败。
感谢Imagine-breaker在d1c1d中的回答,我实现了此函数:

downloadURI: function(uri, name) {
        var link = document.createElement("a");
        if(!name)name="";
        link.setAttribute('download', name);
        link.href = uri;
        document.body.appendChild(link);
        link.click();
        link.remove();
    }

这样称呼它

lfg.downloadURI('/document/download?doc_path=' + encodeURIComponent(rec.get('server_path')),rec.get('name'));

服务器端代码保持原样。我可能也会在我们的经典版应用程序中实现这一点——它看起来简单得多。

相关问题