2010-09-06 6 views
0

Je suis en train de faire un transfert de fichiers très simple en utilisant jQuery, sans avoir à télécharger 3ème partie plugin/scripts.télécharger des fichiers en utilisant jquery ne fonctionne pas

Voici mon code:

HTML

<form enctype="multipart/form-data" action="" method="POST" name="form"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 
    <?php _e('Choose a file to upload') ?>: <input name="uploadedfile" class="uploadedFile" type="file" /> 
    <input type="submit" class="button uploadImage" value="<?php _e('Upload File') ?>" /> 
    </form> 

PHP

<?php 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php'); 

    $uploaddir = WP_CONTENT_URL.'/uploads'.$_POST['current_path']; 
    $uploaddir = str_replace('/','\\', $uploaddir); 
    $uploadfile = $uploaddir .'\\'. basename($_FILES['uploadedfile']['name']); 


    echo $uploadfile; 
?> 

JS

//File upload 
    jQuery('.uploadImage').live('click',function() { 

    var current_path = jQuery('#currentPath span').html(); 
    var new_dir = jQuery(this).find('span').html(); 

    // Load new content in browser window 
    jQuery.ajax({ 
     type: "POST", 
     url: "../wp-content/plugins/wp-filebrowser/uploader.php", 
     dataType: 'html', 
     data: {current_path: current_path, new_dir: new_dir}, 

     success: function(data){ 
       alert(data); 
     }, 

     error: function(){ 
      alert('Page load failed.'); 
     } 
    }); 

    }); 

Le problème est que je ne peux pas obtenir des informations sur $_FILES['uploadedfile']['name']. Est-ce parce que le formulaire n'est jamais soumis?

+0

Etes-vous sûr que l'URL de votre jquery.ajax est correcte? – Chris

+0

À quel moment téléchargez-vous le fichier actuel? –

+0

Pekka: Exactement;) C'est en quelque sorte où je suis coincé. – Steven

Répondre

4

Vous ne pouvez pas télécharger des fichiers via ajax. Lorsque vous faites:

data: {current_path: current_path, new_dir: new_dir}, 

Vous êtes juste d'envoyer le emplacement du fichier, non pas le fichier. La seule façon de télécharger un fichier sans actualiser la page est d'utiliser flash/java/etc, ou de soumettre un formulaire via un iFrame caché.

Je pense que le plugin gère ce formulaire jQuery. Here's another script qui va le faire.

+0

Ceci est la racine du problème. Le plugin de formulaire jQuery utilise un iframe caché pour le contourner –

+0

Oui, j'ai essayé d'utiliser IFrame, mais je n'ai pas réussi à le faire fonctionner. Va tester avec votre lien. Merci. – Steven

0

Assurez-vous de spécifier les paramètres appropriés pour:

  • file_uploads
  • upload_max_filesize
  • memory_limit
  • max_execution_time
  • post_max_size

Voir:

Assurez-vous aussi que:

  • Spécification du bon chemin
  • répertoires ont la permission, chmod 755
  • données vient par le biais, consultez:

print_r($_FILES);

1

C'est exact. Vous ne faites que passer le chemin du fichier en tant que paramètre de requête, pas le contenu du fichier en tant que corps de requête de données multipart/form. Il n'atteindra pas $_FILES. Aussi, pensez-y encore une fois, en passant seul le chemin ne marchera jamais si le serveur web et le webbrowser fonctionnent sur des machines physiquement différentes.

Je suggère de jeter un oeil à jQuery Uploadify plugin, il gère tous les détails désagréables de télécharger des fichiers avec Ajax pour vous de manière transparente.

+0

J'utilise Uploadify dans une autre solution, mais je ne veux pas utiliser flash cette fois. – Steven

+0

Ensuite, allez pour le plugin formulaire jQuery. – BalusC

0

Je pense que vous aurez besoin d'utiliser un plugin jQuery. Uploadify est bonne, mais vous aurez besoin:

* jQuery v1.2.x or greater 
* SWFObject v2.2 or greater 
* Flash Player v9.0.24 or greater 

Vous pouvez obtenir toutes les informations. sur uploadify à www.uploadify.com.

This vous aidera avec plus d'options.

Questions connexes