Extjs 使用'下载图像/文本文件;iframe';

Extjs 使用'下载图像/文本文件;iframe';,extjs,extjs4,download,Extjs,Extjs4,Download,我正在使用Extjs-4.1.0,我想提示下载窗口。我用了“iframe”。仅当正在发布的文件为zip/mp3时,该窗口才会显示,但当正在发布的文件为文本/图像文件时,该窗口不会显示。是否要设置某些属性以启用文本/图像/不同文件的下载窗口 请在下面找到我的代码 var record = item.findParentByType('itemcontextmenu').record; Ext.Ajax.request({ url : ORT.Conf

我正在使用Extjs-4.1.0,我想提示下载窗口。我用了“iframe”。仅当正在发布的文件为zip/mp3时,该窗口才会显示,但当正在发布的文件为文本/图像文件时,该窗口不会显示。是否要设置某些属性以启用文本/图像/不同文件的下载窗口

请在下面找到我的代码

    var record = item.findParentByType('itemcontextmenu').record;
        Ext.Ajax.request({
            url : ORT.Configuration.DOWNLOAD_GRAPHICS_URI+"&graphics="+record.get('id'),
            success: function (response, opt) {

                result = Ext.decode(response.responseText);
                try {Ext.destroy(Ext.get('graphicsDownloadIframe'));}catch(e) {}
                Ext.core.DomHelper.append(document.body, {
                    tag: 'iframe',
                    id:'graphicsDownloadIframe',
                    css: 'display:none;visibility:hidden;height:0px;',
                    src: result.fileName,
                    frameBorder: 0,
                    width: 0,
                    height: 0
                });
            }   
        }); 

这一切都是关于mimetype和你的浏览器如何处理它。所以我想你的问题会是这个。这可能会导致浏览器对接收到的文件进行不同的处理

编辑

下面是我仍然使用的帮助器类

Ext.ux.util.HiddenForm = function(url,fields){
    if (!Ext.isArray(fields))
        return;
    var body = Ext.getBody(),
        frame = body.createChild({
            tag:'iframe',
            cls:'x-hidden',
            id:'hiddenform-iframe',
            name:'iframe'
        }),
        form = body.createChild({
            tag:'form',
            cls:'x-hidden',
            id:'hiddenform-form',
            action: url,
            target:'iframe'
        });

    Ext.each(fields, function(el,i){
        if (!Ext.isArray(el))
            return false;
        form.createChild({
            tag:'input',
            type:'text',
            cls:'x-hidden',
            id: 'hiddenform-' + el[0],
            name: el[0],
            value: el[1]
        });
    });

    form.dom.submit();

    return frame;
}
用法


服务器接受这些参数并建立一种“FileStreamResult”,它触发客户端的下载。如果您使用的是.Net或Java之类的语言,那么已经有一些实现可以使用,如果您使用的是PHP,您可能会发现很有帮助。无论如何,看看你的后端…

这是否意味着我必须在浏览器中进行一些设置,而不必更改上面提到的代码?@Supereme否,你需要查看服务器以及在标题中写入的内容。mimetyp、文件名等都很重要,否则浏览器不会将其识别为下载。。我需要在Ajax.request中设置DefaultHeader吗?但我确实使用了它(试图设置“接受编码”)。它似乎不起作用,但不会被覆盖。它的默认值是:“gzip,deflate”@Supereme我猜你误解了我;我没有谈到前端,我谈到了将文件流回到客户端的服务器。这一切都取决于服务器的响应。。。我将发布我使用的隐藏iframe帮助程序的版本…是的,它将帮助我很多
Ext.ux.util.HiddenForm('http://localhost/file/fetch',[['PropName','PropValue'],['Prop2Name','Prop2Value']])