2012-10-18 56 views
0

ExtJS的版本:4.1.0ExtJS的文件上傳愁楚

回答 - 見下面我的反應......很無聊的真

我有一個簡單的形式,有幾個領域,其中之一屬於xtype fileuploadfield。我在控制檯的this.control方法中偵聽我表單的保存按鈕上的click事件。當click事件發生時,我跑的方法saveForm,它看起來像這樣:

saveForm: function(button) { 
    /** Get the Window Object and retrieve the Form*/ 
    var currentWin = button.up('window'), 
       form = currentWin.down('form'); 

    /** Get the Form Object */ 
    form = form.getForm(); 

    /** ...continued... */ 
} 

在我的方法這一點上,我可以console.log表單對象,考察對象的_fields看看我fileuploadfield和路徑我在該字段輸入的文件(即C:\ fakepath \ somefile.png)。我也可以執行form.getField('upload-field-id');來獲取上傳字段元素。方法form.hasUpload()返回TRUE

踢球者是當我在我的服務器上撥打form.submit()和數組時,它是空的!

在我見過的在ExtJS中上傳文件的例子中,表單提交是通過視圖中保存按鈕上的handler函數發生的。由於我喜歡在控制器中保存處理按鈕的邏輯,所以我希望這不是我唯一的選擇!

任何投入將不勝感激,謝謝您的時間。

回答

0

我覺得有點傻,但問題是關於檢索從傳遞給我saveForm方法按鈕表單對象。

更正:

在我的ExtJS的控制器......

saveForm: function(button) 
{ 
    var currentWindow = button.up('window'); 
/** var form   = button.down('form').getForm(); **INCORRECT** */ 
    var form   = button.up('form').getForm(); /** this is correct */ 

     form.submit({ 
      url  : '/service/form/upload/format/json', 
      waitMsg : 'Uploading....', 
      success : function(form,o) { 
       alert(o.response.responseText); 
      }, 
      failure: function(form, action) 
      { 
       console.error('form, action', form,action); 
       alert('failure'); 
      } 
     }); 
} 

在我的後端(Zend公司),我的控制器操作很簡單:

public function uploadAction() 
{ 
    var_dump($_FILES); 
    this->view->success = false; 
} 

正如預期的那樣,我的

Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String: 
{"success":false}array(1) { 
    ["file-upload-field"]=> 
    array(5) { 
    ["name"]=> 
    string(29) "TestImage.jpg" 
    ["type"]=> 
    string(10) "image/jpeg" 
    ["tmp_name"]=> 
    string(14) "/tmp/php7XfeLD" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(89799) 
    } 
} 
:Chrome檢查後點擊保存按鈕下面的輸出210

服務器已成功接收文件上傳!

0

這肯定是服務器端的問題。 ExtJS利用隱藏的組件將多部分表單提交給服務器。這確實按照指南,示例和文檔中的描述工作。

我不熟悉你提到的上述變種轉儲功能,但你需要確定你的服務器端組件是正確處理多形式提交。

+0

見http://us3.php.net/manual/en/function.var-dump.php。我發現問題是我如何從控制器的操作獲取表單。 '.down'應該替換爲'.up'。在進行此更改後,我的服務器會完美地接收上傳內容,從而允許我在控制器中保留事件處理,並查看視圖中的邏輯! –