使用jquery无法正常上传文件

时间:2010-09-06 17:25:20

标签: php jquery

我正在尝试使用jQuery进行非常简单的文件上传,而无需下载第三方插件/脚本。

这是我的代码:

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.');
        }
    });

  });

问题是我无法获得有关$_FILES['uploadedfile']['name']的信息。这是因为表格从未提交过吗?

4 个答案:

答案 0 :(得分:4)

您无法通过ajax上传文件。当你这样做时:

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

您只是发送文件的位置,而不是实际文件。在没有页面刷新的情况下上传文件的唯一方法是使用flash / java / etc,或通过隐藏的iFrame提交表单。

我认为jQuery表单插件可以处理这个问题。 Here's another script会做到这一点。

答案 1 :(得分:1)

这是对的。您只是将文件路径作为请求参数传递,而不是将文件内容作为multipart / form数据请求体传递。它不会落在$_FILES。另外,再想一想,如果网络服务器和webbrowser在物理上不同的机器上运行,那么单独通过这条路并不会起作用。

我建议查看jQuery Uploadify plugin,它会透明地为您处理使用Ajax上传文件的所有令人讨厌的细节。

答案 2 :(得分:0)

确保为:

指定正确的设置
  • file_uploads
  • 的upload_max_filesize
  • memory_limit的
  • 的max_execution_time
  • 的post_max_size

请参阅:

同时确保:

  • 指定正确的路径
  • 目录有权限,chmod为755
  • 数据即将通过,请查看:

print_r($_FILES);

答案 3 :(得分:0)

我认为你需要使用jQuery插件。 Uploadify很好,但您需要:

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

您可以获得所有信息。在uploadify上www.uploadify.com。

This会为您提供更多选择。