2013-07-09 65 views
0

我有一个Ajax上传使用Jquery和PHP的问题..虽然有很多stackoverflow帖子讨论相同的主题,我没有找到一个匹配我的情况。Ajax上传与JQuery和PHP

HTML:

<form action="uploadrecord.php" id="upload_record_form" method="post" enctype="multipart/form-data"> 
       <div id="upload_record_form_result"></div> 
       <ul> 
        <li><input type="file" name="uploadrecord" id="uploadrecord"/></li> 
       </ul> 
       <progress></progress> 
      </form> 

     </div> 

的Javascript:

$('#uploadrecord').live('change', function(event) { 

     var formData = new FormData($('#upload_record_form')[0]); 

     $.ajax({ 
      url: $('#upload_record_form').attr('action'), 
      type: 'POST', 
      enctype: 'multipart/form-data', 
      xhr: function() { 
       myXhr = $.ajaxSettings.xhr(); 
       if (myXhr.upload) { 
        myXhr.upload.addEventListener('progress', progressHandlingFunction, false); 
       } 
       return myXhr; 
      }, 

      success: completeHandler = function(data) { 
       $('#upload_record_form_result').html(data); 
      }, 
      error: errorHandler = function() { 
       alert("Failure"); 
      }, 
      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false 
     }, 'json'); 


    }); 

PHP

<?php 
if (isset($_FILES['uploadrecord'])) { 
    if ((!empty($_FILES["uploadrecord"])) && ($_FILES['uploadrecord']['error'] == 0)) { 

     $filename = basename($_FILES['uploadrecord']['name']); 
     $ext = substr($filename, strrpos($filename, '.') + 1); 

     $types = array(
      'video/mp4', 'video/3gpp', 'video/divx', 'video/flv', 'video/mpeg', 'video/mpeg-2', 'video/mpeg4', 'video/mpeg4' 
     ); 

     $type = $_FILES['uploadrecord']['type']; 
     if (in_array($type, $types) && $_FILES["uploadrecord"]["size"] < 20000000) { 

      $new = sha1(date('Y/m/d H:i:s')); 
      $newname = dirname(__FILE__) . '/records/' . $new . '.' . $ext; 

      if ((move_uploaded_file($_FILES['uploadrecord']['tmp_name'], $newname))) { 
       echo 'done'; 
      } else { 
       echo 'failed 1'; 
      } 
     } 
    } else { 
     echo 'failed 2'; 
    } 
} else { 
    echo 'Upload failed 3'; 
} 

当我尝试了以前的代码,并上传记录文件,它会显示 “失败2”,这意味着“错误”代码不同于0.

当我的var_dump数组$ _FILES [“uploadrecord”] ...这是我所得到的:

array (size=5) 
    'name' => string 'Nao Robot.flv' (length=13) 
    'type' => string '' (length=0) 
    'tmp_name' => string '' (length=0) 
    'error' => int 1 
    'size' => int 0 

我想不通,为什么“不对tmp_name”和类型设置为空字符串,并为什么大小设置为0.

问题究竟在哪里?它来自客户端还是服务器端脚本?

预先感谢

+2

也许你应该增加你的upload_max_filesize? – Pieter

+0

谢谢,但它显示:'失败2',这意味着它根本没有达到大小条件...它停止与“if((!empty($ _ FILES [”uploadrecord“]))&&( $ _FILES ['uploadrecord'] ['error'] == 0))“条件。 – SmootQ

+0

我想我得到了你想说的话,对不起,我不知道,我知道...你的意思是php.ini设置,我会尽力回馈 – SmootQ

回答

2

Mac OSX上:

1)转到为/etc/php.ini
2)与许可打开文件到写/读
3)搜索线:

upload_max_filesize = 2M 

4)改变,例如,6MB瓯更多:

upload_max_filesize = 6M 

5)保存并用命令重新启动Apache:

sudo apachectl restart 
+1

非常感谢您的回答,这些正是我解决它的步骤,我忘了添加解决方案这里。 (这个问题在2013年被问过)。 干杯! – SmootQ

+1

哦,对不起延迟。我认为这个答案将在未来帮助其他用户。谢谢! –