2012-11-28 46 views
1

我正在使用Extjs - 4.1.0並且我想提示下載窗口。我用'iframe'。該窗口僅在發佈的文件爲zip/mp3時顯示,但當發佈的文件爲文本/圖像文件時,該窗口不會顯示。是否有一些屬性設置爲啓用文本/圖像/不同文件的下載窗口?使用'iframe'下載圖片/文本文件

請在下面找到我的代碼。

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 
       }); 
      } 
     }); 

回答

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有幫助。無論如何,看看你的後端......

+0

這是否意味着我必須在瀏覽器中進行一些設置而不必更改上面提到的代碼? – Supereme

+0

@Supereme不,您需要查看服務器以及您在標題中寫入的內容。 mimetyp,文件名等非常重要,否則瀏覽器將無法將其識別爲下載。 – sra

+0

目前我正在使用靜態json ..我是否需要在Ajax.request中設置defaultHeaders?但是我確實使用了(試圖設置'Accept-Encoding')。它似乎沒有工作,但沒有被覆蓋。它的默認值是:'gzip,deflate' – Supereme