2010-09-22 3 views
0

загрузить свой файл, используя ExtJS и он сохраняется на сервере проблема в том, что я не могу получить функцию успеха или даже waitMsg всегда работает Вот код ExtJS код:загрузки файлов с помощью ExtJS и 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(){ 

     } 
    }] 
}); 

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

Это не работает, моя форма загрузки находится в окне, которое я показываю, когда я нажимаю кнопку, может ли это быть проблемой ??? –

+0

Нет, если PHP-скрипт, который обрабатывает загрузку на стороне сервера, ТОЛЬКО возвращает JSON, этого должно быть достаточно (т. Е. Единственное, что должен вернуть PHP, т. Е. «{Success: true}». – SW4

3

У вас была аналогичная проблема. Выяснили, что вам нужно установить тип содержимого на «text/html» на странице, которая обрабатывает загрузку файла. :-(

Response.ContentType = "text/html"; 

Если вы read the documentation for Ext.data.Connection, вы увидите, что

Ответ сервера обрабатывается браузером для создания документа для IFRAME. Если сервер использует JSON для отправки возвращаемого объекта , то заголовок Content-Type должен быть установлен в положение «текст/html» для того, чтобы сказать браузеру, чтобы вставить текст без изменений в теле документа.

Взял меня некоторое время, чтобы найти это, но, как я пришел по вашему вопросу, кто-то еще может справитесь с аналогичной проблемой!

надеюсь, это им поможет!

Смежные вопросы