使用'iframe'下载图片/文本文件

时间:2012-11-28 08:49:16

标签: extjs extjs4 download

我正在使用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
                });
            }   
        }); 

1 个答案:

答案 0 :(得分:2)

所有关于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;
}

用法

Ext.ux.util.HiddenForm('http://localhost/file/fetch',[['PropName','PropValue'],['Prop2Name','Prop2Value']])

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