2010-09-22 8 views
0

je télécharger mon fichier en utilisant ExtJS et il est enregistré dans le serveur le problème est que je ne peux pas obtenir une fonction de succès ou même le waitMsg est toujours en cours d'exécution Voici le code Code ExtJS:télécharger des fichiers en utilisant ExtJS et PHP

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(){ 

     } 
    }] 
}); 

code 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'; 
} 

?> 

Répondre

1

Vous devez retourner une réponse JSON pour le téléchargement de fichiers, dans votre code php utiliser:

echo "{success: true}"; 

ou

echo "{success: false}"; 

Pour référence plus s'il vous plaît se référer à: http://dev.sencha.com/deploy/dev/docs/source/Action.html#cls-Ext.form.Action.Submit

Vous pouvez également renvoyer des erreurs personnalisées qui vous aideront à gérer les différents états que vous utilisez dans votre code.

+0

Cela ne fonctionne pas, mon formulaire de téléchargement est dans une fenêtre que je montre lorsque je clique sur un bouton, cela peut-il être le problème ??? –

+0

Non- à condition que le script PHP qui gère le téléchargement côté serveur renvoie UNIQUEMENT le JSON, cela devrait suffire (c'est-à-dire que la seule chose que le PHP devrait renvoyer est le {'success: true}'. – SW4

3

Avait un problème similaire. Trouvé que vous devez définir le type de contenu à "text/html" sur la page qui gère le téléchargement de fichiers. :-(

Response.ContentType = "text/html"; 

Si vous read the documentation for Ext.data.Connection, vous verrez que

La réponse du serveur est analysé par le navigateur pour créer le document pour le IFRAME. Si le serveur utilise JSON pour envoyer l'objet de retour , puis l'en-tête Content-type doit être réglé sur « text/html » afin de dire au navigateur d'insérer le texte inchangé dans le corps du document.

m'a pris un certain temps pour trouver, mais comme je suis venu à travers votre question, quelqu'un d'autre pourrait faire avec un problème similaire!

espérons que cela va les aider!

Questions connexes