2010-09-22 101 views
0

我用EXTJS上傳我的文件,它保存在服務器 的問題是,我不能讓一個成功的功能,甚至waitMsg始終運行 這裏是代碼 EXTJS的代碼:文件上傳

var fp = new Ext.FormPanel({ 
    fileUpload: true, 
    width: 500, 
    frame: true, 
    title: 'File Upload Form', 
    bodyStyle: 'padding: 10px 10px 0 10px;', 
    labelWidth: 50, 
    defaults: { 
     anchor: '95%', 
     allowBlank: false, 
     msgTarget: 'side' 
    }, 
    items: [{ 
     xtype: 'fileuploadfield', 
     id: 'form-file', 
     emptyText: 'Selectionnez un fichier', 
     fieldLabel: 'Fichier', 
     name: 'photo-path', 
     buttonText: 'Parcourir' 
    }], 
    buttons: [{ 
     text: 'Ajouter', 
     handler: function(){ 
      if(fp.getForm().isValid()){ 
    var myUrl = 'php/file-upload.php?idOrganisme=' + idOrganisme + '&demarche=' + demarche; 
    //alert(Ext.getCmp('').); 
       fp.getForm().submit({ 
        url: myUrl, 
        waitMsg: 'Envoi de votre fichier...', 
     success:function(fp,o){ 
     alert('Sucess'); 

     } 
       }); 
      } 
     } 
    },{ 
     text: 'Fermer', 
     handler: function(){ 

     } 
    }] 
}); 

PHP代碼:

<?php 
include("connexion.php"); 

$server = "http://localhost/wa"; 
$idOrganisme = $_GET['idOrganisme']; 
$demarche = $_GET['demarche']; 

$req = $bdd->query('SELECT idDemarche FROM demarche,typeDemarche WHERE 
idOrganisme=' . $idOrganisme . 
' AND demarche.idTypeDemarche = typeDemarche.idTypeDemarche 
AND typeDemarche.typeDemarche="' . $demarche .'"'); 
$demarcheArray = $req->fetch(); 
$idDemarche = $demarcheArray['idDemarche']; 

$myPath = '../uploads/_' . $idOrganisme . '_' . $idDemarche . '/'; 

$target_path = utf8_decode($myPath); 
mkdir($target_path, 0705); 
echo 'OK'; 
if(isset($_FILES)){ 
    echo 'OK'; 
    $temp_file_name = utf8_decode($_FILES['photo-path']['tmp_name']); 
    $original_file_name = utf8_decode($_FILES['photo-path']['name']); 

    // Find file extention 
    $ext = explode ('.', $original_file_name); 
    $ext = $ext [count ($ext) - 1]; 

    // Remove the extention from the original file name 
    $file_name = str_replace ($ext, '', $original_file_name); 

    $new_name = $target_path . '[' . utf8_encode($file_name) . $ext; 
    chmod($new_name, 705); 

    if(move_uploaded_file ($temp_file_name, $new_name)) { 
    if($idDemarche!=''){ 
    $length = strlen($new_name); 
    $path = $server . substr($new_name,2,$ 
    $req = $bdd->prepare('INSERT INTO liens(idDemarche, lien) values(:idDemarche, :lien)'); 
    $req->execute(array('idDemarche' => intVal($idDemarche), 'lien' => $path)); 
    echo "OK"; 
    } 
    } 
    else { 
    echo "error"; 
    } 
    echo 'message'; 
} 

?> 

回答

1

您需要返回文件上傳的JSON響應,在你的PHP代碼中使用兩種:

echo "{success: true}"; 

echo "{success: false}"; 

更多參考,請參閱:http://dev.sencha.com/deploy/dev/docs/source/Action.html#cls-Ext.form.Action.Submit

您也可以返回自定義錯誤,這將幫助你處理你正在使用在代碼中的不同狀態。

+0

它不起作用,我的上傳表單在我點擊一個按鈕時顯示的窗口中,這可能是問題嗎? – 2010-09-23 19:14:33

+0

否 - 提供處理服務器端上載的PHP腳本只返回JSON,這應該是足夠的(即PHP應該返回的唯一東西,即'{success:true}')。 – SW4 2010-09-27 08:36:21

3

有類似的問題。發現您需要在處理文件上傳的頁面上將內容類型設置爲「text/html」。 :-(

Response.ContentType = "text/html"; 

如果read the documentation for Ext.data.Connection,你會看到

服務器響應是由瀏覽器解析以創建IFRAME的文檔。如果服務器使用JSON發送返回的對象,那麼Content-Type頭部必須設置爲「text/html」,以便告訴瀏覽器將文本原樣插入文檔主體。

花了我一會兒才找到這個,但是當我來在你的問題上,別人可能會做一個類似的問題!

希望這會幫助他們!