2013-08-24 59 views
2

我想上傳一個文件到wcf服務並讓它讀取excel文件並以json格式將文件中的數據返回給我。在有指煎茶例如在如何創建estjs文件上傳,下面是代碼Extjs將Excel文件上傳到WCF Restful服務

Ext.create('Ext.form.Panel', { 
    renderTo: 'fi-form', 
    width: 500, 
    frame: true, 
    title: 'File Upload Form', 
    bodyPadding: '10 10 0', 

    defaults: { 
     anchor: '100%', 
     allowBlank: false, 
     msgTarget: 'side', 
     labelWidth: 50 
    }, 

    items: [{ 
     xtype: 'textfield', 
     fieldLabel: 'Name' 
    },{ 
     xtype: 'filefield', 
     id: 'form-file', 
     emptyText: 'Select an Excel', 
     fieldLabel: 'Excel', 
     name: 'Excel-path', 
     buttonText: '', 
     buttonConfig: { 
      iconCls: 'upload-icon' 
     } 
    }], 

    buttons: [{ 
     text: 'Save', 
     handler: function(){ 
      var form = this.up('form').getForm(); 
      if(form.isValid()){ 
       form.submit({ 
        url: 'rest/upload.svc', 
        waitMsg: 'Uploading your file...', 
        success: function(fp, o) { 
         msg('Success', 'Processed file "' + o.result.file + '" on the server'); 
        } 
       }); 
      } 
     } 
    },{ 
     text: 'Reset', 
     handler: function() { 
      this.up('form').getForm().reset(); 
     } 
    }] 
}); 

我的問題是,在我的WCF休息服務將服務期待什麼樣的數據類型?

在客戶端代碼中,它像是將整個表單發回服務,所以我可以使用request.Form(「Excel-path」)來獲取excel文件嗎?

這是一個很好的方法嗎?我曾試圖用

ActiveXObject("Excel.Application") 

閱讀客戶端上的Excel文件,但它只能在IE工作以及需要改變IE的某些ActiveX設置,這就是爲什麼我使用的服務來讀取文件,而不是考慮。想知道是否還有其他方法可以做到這一點。

回答

2

ExtJS將創建一個隱藏的iFrame並將該文件通過該iFrame中的表單發佈到您的服務器。

您的服務器應該有一個可接受多部分形式POST的URL。

ExtJS預計您的服務器會收到HTML響應。

發送到服務器:

Content-Type: multipart/form-data... 
POST /files 
Request Payload... 

服務器返回:

Status: 201 Created 
Content-Type: text/html  
{ 
    success:true, 
    id:123, 
    link:"/files/123" 
} 

您的服務器也應該有一個控制器,可以返回該文件的表示:

發送到服務器:

GET /files/123 
Accept: application/json 

服務器返回:

Status: 200 OK 
Content-type: application/json 
{ 
    id:123, 
    fileName:"somefile.xls", 
    someData:"..." 
} 

所以,你需要做兩件事情:將文件發送到服務器,以獲得其鏈接,然後收到使用鏈接服務器上的文件。

+0

是的,Ext JS期望'text/html'作爲響應類型。請參閱[這裏](http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.form.Basic-method-hasUpload)瞭解更多信息。 –