2010-09-22 126 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”,以便告诉浏览器将文本原样插入文档主体。

花了我一会儿才找到这个,但是当我来在你的问题上,别人可能会做一个类似的问题!

希望这会帮助他们!