我有一个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.
问题究竟在哪里?它来自客户端还是服务器端脚本?
预先感谢
也许你应该增加你的upload_max_filesize? – Pieter
谢谢,但它显示:'失败2',这意味着它根本没有达到大小条件...它停止与“if((!empty($ _ FILES [”uploadrecord“]))&&( $ _FILES ['uploadrecord'] ['error'] == 0))“条件。 – SmootQ
我想我得到了你想说的话,对不起,我不知道,我知道...你的意思是php.ini设置,我会尽力回馈 – SmootQ